Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 24.12.2016
Сообщений: 2
1

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

24.12.2016, 14:06. Показов 9768. Ответов 3

Author24 — интернет-сервис помощи студентам
Всем добрый день!

При компиляции возникает ошибка LNK2019, не могу самостоятельно её отыскать. Помогите, пожалуйста, разобраться.

Моя задача - написать шаблон класса таблица, реализованная по типу списка, в которой хранятся различные фигуры.

Сам класс описан так:
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
#ifndef TABLE_H
#define TABLE_H
 
#include "Head.h"
#include <windows.h>   
#include <windowsx.h>   
#include <stdio.h> 
#include <locale.h> 
#include <conio.h>
 
// Строка таблицы
template <class Type> struct Line
{
    Type Q;
    Line *next, *prev;
};
 
// Класс таблица
template <class Type> class Table
{
private:
    Line <Type> *beg, *end;       // Указатели на первый и на последний элементы таблицы соответственно
 
    Line <Type> *Search(Type Qq); // Поиск элемента в таблице
public:
    Table();  // Инициализируем таблицу
    ~Table(); // Очищаем таблицу
 
    Type* get_Quadrangle(Type *Q); // Возвращает четырёхугольник
    void set_Quadrangle(Type Q);   // Помещает четырёхугольник
 
    bool SearchLite(Type Qq); // Проверка элемента на принадлежность таблице
    int Demonstration();      // Демонстрация содержимого таблицы
    void Read();              // Чтение элементов из файла
    void Save();              // Запись таблицы в файл
};
#endif
Реализация функций, с которыми возникает проблема (остальные длинные, копировать сюда не стал):
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "Table.h"
 
// Инициализируем таблицу
template <typename Type>
inline Table<Type>::Table()
{
    beg = NULL;
    end = NULL;
}
 
// Полностью очищаем таблицу
template <typename Type>
inline Table<Type>::~Table()
{
    if (beg)
    {
        Line <Type> *L;
 
        while (beg != NULL)
        {
            L = beg;
            beg = beg->next;
            delete L;
        }
 
        beg = NULL;
        end = NULL;
    }
 
    Save();
}
 
// Демонстрация содержимого таблицы
template <typename Type>
inline int Table<Type>::Demonstration()
{
    int way = 0;
    Line <Type> *L;
 
    L = beg; // Устанавливаем указатель на начало
 
    if (!beg)
        return 0;
 
    while (way != 6 || way != 1 || way != 2 || way != 3)
    {
        way = L->Q.drawQuadrangle();
        Save();
 
        switch (way)
        {
            case 4:
            {
                if (L->prev)
                    L = L->prev;
                break;
            }
            case 5:
            {
                if (L->next)
                    L = L->next;
                break;
            }
        }
    } 
 
    return way
}
 
// Чтение элементов из файла
template <typename Type>
inline void Table<Type>::Read()
{
    FILE *file;
    char c;
    fopen_s(&file, InputQC, "rt");
 
    if (file) // Входной файл открыт корректно
    {
        Color RGB;               // Переменная для чтения
        QuadrangleСontour Qread; // Переменная класса фигура-контур
        POINT PPT[4];            // Массив координат для чтения
         
        while (!feof(file))
        {
            fscanf_s(file, "%d %d %d %d %d %d %d %d", &PPT[0].x, &PPT[0].y, &PPT[1].x, &PPT[1].y, &PPT[2].x, &PPT[2].y, &PPT[3].x, &PPT[3].y); // Считываем координаты точек
 
            if (!(PPT[0].x == -858993460 && PPT[0].y == -858993460))
            {
                Qread.set_Coordinate(PPT);
 
                fscanf_s(file, "%d %d %d", &RGB.R, &RGB.G, &RGB.B); // Считываем цвет контура
                Qread.set_СolorLine(RGB);
 
                if (!SearchLite(Qread))
                    set_Quadrangle(Qread);  // Помещаем четырёхугольник в таблицу
                fscanf_s(file, "%c", &c);   // Считываем разделительную строку
            }   
        }
 
        fclose(file);
    }
    else
        throw 7;
}
И сам main:
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
#include "Table.h"
#include "Head.h"
 
void main()
{ 
    setlocale(LC_CTYPE, "Russian");
 
    Table <QuadrangleСontour> TQC;  // Контейнер для хранения фигур-контуров
    Table <QuadrangleFill> TQF;     // Контейнер для хранения закрашенных фигур
    Table <QuadrangleCombo> TQComb; // Контейнер для хранения вложенных фигур
    int way = 0;                    // Переключатель
    char cs = 0;      
 
        TQC.Read(); // Считываем данные
        TQF.Read();
        TQComb.Read();
 
        while (way == 0)
        {
            cs = _getch();
 
            switch (cs)
            {
                case '1':
                {
                    way = 1;
                    break;
                }
                case '2':
                {
                    way = 2;
                    break;
                }
                case '3':
                {
                    way = 3;
                    break;
                }
                case 'r':
                {
                    way = 6;
                    break;
                }
            }
 
            while (way != 6 || way != 0)
                switch (way)
                {
                    case 1:
                    {
                    way = TQC.Demonstration();
                    break;
                    }
                    case 2:
                    {
                    way = TQF.Demonstration();
                    break;
                    }
                    case 3:
                    {
                    way = TQComb.Demonstration();
                    break;
                    }
                }
        }
Возникающая ошибка:
Код
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: __cdecl Table<class QuadrangleСontour>::~Table<class QuadrangleСontour>(void)" (??1?$Table@VQuadrangleСontour@@@@QEAA@XZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: __cdecl Table<class QuadrangleСontour>::Table<class QuadrangleСontour>(void)" (??0?$Table@VQuadrangleСontour@@@@QEAA@XZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: __cdecl Table<class QuadrangleFill>::~Table<class QuadrangleFill>(void)" (??1?$Table@VQuadrangleFill@@@@QEAA@XZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: __cdecl Table<class QuadrangleFill>::Table<class QuadrangleFill>(void)" (??0?$Table@VQuadrangleFill@@@@QEAA@XZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: __cdecl Table<class QuadrangleCombo>::~Table<class QuadrangleCombo>(void)" (??1?$Table@VQuadrangleCombo@@@@QEAA@XZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: __cdecl Table<class QuadrangleCombo>::Table<class QuadrangleCombo>(void)" (??0?$Table@VQuadrangleCombo@@@@QEAA@XZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: void __cdecl Table<class QuadrangleСontour>::Read(void)" (?Read@?$Table@VQuadrangleСontour@@@@QEAAXXZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: int __cdecl Table<class QuadrangleСontour>::Demonstration(void)" (?Demonstration@?$Table@VQuadrangleСontour@@@@QEAAHXZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: int __cdecl Table<class QuadrangleFill>::Demonstration(void)" (?Demonstration@?$Table@VQuadrangleFill@@@@QEAAHXZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Ошибка	LNK1120	неразрешенных внешних элементов: 10	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\x64\Debug\OOP2.exe	1
Ошибка	LNK2019	ссылка на неразрешенный внешний символ "public: int __cdecl Table<class QuadrangleCombo>::Demonstration(void)" (?Demonstration@?$Table@VQuadrangleCombo@@@@QEAAHXZ) в функции main	OOP2	C:\Users\Maxim_Neupokoev\Documents\Visual Studio 2015\Projects\OOP5\OOP1.2\Main.obj	1
Признаюсь честно, я студент. Мне очень сложно оперировать профессиональными терминами. Если Вы можете помочь, то объясните, пожалуйста, на максимально доступном языке.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 14:06
Ответы с готовыми решениями:

Ошибка LNK2019: ссылка на неразрешенный внешний символ
Есть код, который должен складывать элементы классов. Вопрос, как нечистая сила мне мешает...

Ошибка LNK2019: ссылка на неразрешенный внешний символ
Уже который день не могу разобраться с этой проблемой! У меня есть класс Agent, с данными name,...

Ошибка LNK2019 ссылка на неразрешенный внешний символ
В заголовочном файле объявлен класс class cLogReader { public: cLogReader(int i) { ...

Ошибка LNK2019 - ссылка на неразрешенный внешний символ
Доброго времени суток. При запуске выдается следующую ошибку: LNK2019 ссылка на неразрешенный...

3
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
24.12.2016, 16:27 2
Цитата Сообщение от МаксимФПМИ Посмотреть сообщение
Сам класс описан так:
В этот же файл помести и реализации шаблонов. В месте использования шаблона, компилятор должен видеть не только его описание, но и реализацию, чтобы создать инстанс шаблона.
0
0 / 0 / 0
Регистрация: 24.12.2016
Сообщений: 2
24.12.2016, 21:09  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
В этот же файл помести и реализации шаблонов. В месте использования шаблона, компилятор должен видеть не только его описание, но и реализацию, чтобы создать инстанс шаблона.
Спасибо, это решает мою проблему. С чем это может быть связано? Обычно всегда описываешь класс в заголовочном файле (*.h), а потом подключаешь его к файлу *.cpp и описываешь реализацию функций класса. Здесь я с шаблоном поступил точно так же.

Это некая особенность шаблонов?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
24.12.2016, 21:16 4
Цитата Сообщение от МаксимФПМИ Посмотреть сообщение
Это некая особенность шаблонов?
Да.
Цитата Сообщение от МаксимФПМИ Посмотреть сообщение
С чем это может быть связано?
Цитата Сообщение от nd2 Посмотреть сообщение
В месте использования шаблона, компилятор должен видеть не только его описание, но и реализацию, чтобы создать инстанс шаблона.
0
24.12.2016, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2016, 21:16
Помогаю со студенческими работами здесь

Ошибка LNK2019 ссылка на неразрешенный внешний символ
Ошибка LNK2019 ссылка на неразрешенный внешний символ &quot;void __cdecl sumArray(int * *,int *...

Ошибка LNK2019 ссылка на неразрешенный внешний символ
Переделывала целочисленнный Список в шаблон + добавила итераторы. но выходят эти ошибки,пофиксить...

Ошибка LNK2019: ссылка на неразрешенный внешний символ _WinMain@16
#include&lt;fstream&gt; #include&lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;ctime&gt; #include &lt;stdlib.h&gt;...

Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ &quot;public: void __thiscall...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru