2 / 1 / 1
Регистрация: 18.11.2018
Сообщений: 25
1

"Ошибка LNK2019 Ссылка на неразрешенный внешний символ"

22.12.2018, 15:02. Показов 2794. Ответов 4

Знаю что очередное повторение одной и той же ошибки, но везде пишут про то, что функции не реализованы. Я вроде все реализовал, вообще не понимаю что нет. Вот файлы:

UnsignedPoint.h :
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma once
 
#ifndef IOSTREAM
    #include <iostream>
#endif // !IOSTREAM
 
class UnsignedPoint
{
public:
 
    template<typename type>
    void SetX(type x);
 
    template<typename type>
    void SetY(type y);
 
    template<typename type>
    void SetZ(type z);
 
    template<typename type, typename type2, typename type3>
    void SetAll(type x, type2 y, type3 z);
 
    void Print();
 
    template<typename type, typename type2, typename type3>
    UnsignedPoint(type x, type2 y, type3 z);
 
    UnsignedPoint();
 
private:
    unsigned int x, y, z;
};



UnsignedPoint.cpp :
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef UNSIGNEDPOINT_H
#include "UnsignedPoint.h"
#endif  //!UNSIGNEDPOINT_H
 
template<typename type>
void UnsignedPoint::SetX(type x)
{
    if (typeid(this->x).name() == typeid(x).name())
    {
        this->x = x;
    }
 
    else {
        throw "Uncorrect type X!";
    }
}
 
 
 
template<typename type>
void UnsignedPoint::SetY(type y)
{
    if (typeid(this->y).name() == typeid(y).name())
    {
        this->y = y;
    }
 
    else {
        throw "Uncorrect type Y!";
    }
}
 
template<typename type>
void UnsignedPoint::SetZ(type z)
{
    if (typeid(this->z).name() == typeid(z).name())
    {
        this->z = z;
    }
 
    else {
        throw "Uncorrect type Z!";
    }
}
 
template<typename type, typename type2, typename type3>
void UnsignedPoint::SetAll(type x, type2 y, type3 z)
{
    SetX(x);
    SetY(y);
    SetZ(z);
}
 
void UnsignedPoint::Print()
{
    std::cout << "x = " << x << "  y = " << y << "  z = " << z << std::endl;
}
 
template<typename type, typename type2, typename type3>
 
UnsignedPoint::UnsignedPoint(type x, type2 y, type3 z)
{
    SetX(x);
    SetY(y);
    SetZ(z);
}
 
UnsignedPoint::UnsignedPoint(): x(0), y(0), z(0)
{}



Source.cpp :
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "UnsignedPoint.h"
using namespace std;
 
int main()
{
    try {
        UnsignedPoint a;
        a.SetX(5);
        a.Print();
    }
 
 
    catch (const exception& ex)
    {
        cout << ex.what() << endl;
    }
 
    return 0;
}



Compiler output :
Кликните здесь для просмотра всего текста
Код
1>------ Сборка начата: проект: ex, Конфигурация: Debug Win32 ------
1>  UnsignedPoint.cpp
1>Source.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall UnsignedPoint::SetX<int>(int)" (??$SetX@H@UnsignedPoint@@QAEXH@Z) в функции _main
1>D:\C++\ex\Debug\ex.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2018, 15:02
Ответы с готовыми решениями:

Ошибка "LNK2019 ссылка на неразрешенный внешний символ"
допустим есть файл A.h в котором записано следующее template &lt;typename T&gt; class A { public:...

Ошибка в приложении: "error LNK2019: ссылка на неразрешенный внешний символ"
Создал консольное приложение и в него добавил код: #include &quot;afxwin.h&quot; // MFC Основные и...

Ошибка в классе Vegetatable "LNK2019 ссылка на неразрешенный внешний символ _main"
Добрый день, дано условие : &quot;Создать класс Vegetable, содержащий следующие элементы: - поле «вес»...

Ошибка : LNK2019 ссылка на неразрешенный внешний символ "public: void_thiscall person::show_data(void)"
Доброго времени суток. Помогите пожалуйста с программой, я недавно начал осваивать с++ и подобная...

4
473 / 425 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
22.12.2018, 15:36 2
Цитата Сообщение от qwatt Посмотреть сообщение
template<typename type>
Сколько раз уже можно на этом заострять внимание...
0
2 / 1 / 1
Регистрация: 18.11.2018
Сообщений: 25
22.12.2018, 16:05  [ТС] 3
Классный ответ, мне нравится
А подробнее можно, пожалуйста?
0
16093 / 8691 / 2124
Регистрация: 30.01.2014
Сообщений: 14,978
22.12.2018, 16:26 4
Лучший ответ Сообщение было отмечено qwatt как решение

Решение

qwatt, определение шаблона должно быть доступно в точке инстанцирования. Вынеся определение в другую единицу трансляции (UnsignedPoint.cpp), вы заблокировали возможность инстанцирования в Source.cpp.
А оратор выше намекал вам на то, что тема эта очень часто всплывает среди неофитов и вы могли бы найти ответ самостоятельно поиском по форуму.
1
2 / 1 / 1
Регистрация: 18.11.2018
Сообщений: 25
22.12.2018, 16:53  [ТС] 5
Я вынес определение в UnsignedPoint.h, но теперь в Source.cpp при обращении объекта к методу SetX() пишет, что данного метода нет.

Добавлено через 7 минут
Всё, я очень сильно ступил.
Всё определяется, спасибо за ответ
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2018, 16:53
Помогаю со студенческими работами здесь

Ошибка LNK2019 ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)"
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов...

Ошибка при отображении русских шрифтов в консоли: "error LNK2019: ссылка на неразрешенный внешний символ"
Доброго времени суток! решил модернизировать простенькую программу, чтобы отображался русский шрифт...

Очередная ошибка LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl ClassName::ClassName(void)"
Всем привет, по форуму нашёл очень много таких тем, но ни одна конкретно в моём случае не помогла,...

В чем ошибка? error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Point::Point(void)" (?0Point@@Q
#ifndef FIGURE_H #define FIGURE_H class Figure{ public: virtual double Square() = 0; virtual...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru