Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
#1

Ошибка LNK2019 при сборке проекта. - C++

18.11.2011, 13:02. Просмотров 748. Ответов 3
Метки нет (Все метки)

В проект включена статическая библиотека, методами классов которой нужно воспользоваться.
Итак:
Заголовочный файл проекта (headers\TuringTranslator.h):
C++
1
2
3
...
#include "headers\DSAA.h"
...
, где DSAA.h является заголовочным файлом для необходимой статической библиотеки.
Код проекта (TuringTranslator.cpp):
C++
1
2
3
4
5
...
#include "headers\TuringTranslator.h"
...
_DSAA DoublyLinkedList<char> tape;
...
Выдается ошибка :
C++
1
Error   1   error LNK2019: unresolved external symbol "public: __thiscall dsaa::DoublyLinkedList<char>::DoublyLinkedList<char>(void)" (??0?$DoublyLinkedList@D@dsaa@@QAE@XZ) referenced in function "int __cdecl initialization(char const *)" (?initialization@@YAHPBD@Z)
Можно подумать, что не описана реализация конструктора класса DoublyLinkedList, смотрим библиотеку:
Заголовочный файл библиотеки (headers\DSAA.h)
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
#define _DSAA_BEGIN     namespace dsaa {
#define _DSAA_END               }
#define _DSAA   ::dsaa::
 
_DSAA_BEGIN
    template <typename dataType> class DoublyLinkedList {
    public:
        DoublyLinkedList();
    };
_DSAA_END
...
И конечно не забываем про код библиотеки (DSAA.cpp)
C++
1
2
3
4
5
6
7
#include "headers\DSAA.h"
 
template <typename dataType> _DSAA DoublyLinkedList<dataType>::DoublyLinkedList()
{
    
}
...
Реализация конструктора присутствует, что и приводит в тупик.
Но при этом, если библиотеку делать приложением (соответственно добавив main и создав там экземпляр класса), то оно работает корректно само по себе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 13:02     Ошибка LNK2019 при сборке проекта.
Посмотрите здесь:

C++ Ошибка на компиляторе MinGW при сборке структуры
Ошибка LNK2019 при линковке - как это решать систематически? C++
C++ Ошибка при компиляции error LNK2019
Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ C++
Code::Blocks, ошибки при сборке проекта, использующего OpenGL C++
Ошибка при сборке приложения C++
Ошибка при сборке проекта - invalid use of non-static data member 'MainWindow::test' C++
Ошибка LNK2019 При динамическом создании объекта C++
Ошибка при сборке программы из нескольких файлов C++
C++ Ошибка при сборке небольшого проекта. undefined reference to
Ошибка при сборке проекта: "error LNK2019: unresolved external symbol" C++
C++ Ошибка при сборке C4706

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.11.2011, 13:04     Ошибка LNK2019 при сборке проекта. #2
http://msdn.microsoft.com/ru-ru/library/799kze2z.aspx
Bers
Заблокирован
18.11.2011, 13:11     Ошибка LNK2019 при сборке проекта. #3
У вас в DSAA.h прототип, а в DSAA.cpp - реализация.

В отличие от обычных классов так делать с шаблонами нельзя.

Если вы сделаете вот так, то скорее всего скомпилируется и будит работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//headers\DSAA.h
//никакого файла cpp для данного хэдэра не нужно
 
#define _DSAA_BEGIN             namespace dsaa {
#define _DSAA_END                               }
#define _DSAA   ::dsaa::
 
_DSAA_BEGIN
        template <typename dataType> class DoublyLinkedList {
        public:
                DoublyLinkedList()  {/*здесь тело*/}
               
        };
_DSAA_END
...
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
18.11.2011, 22:04  [ТС]     Ошибка LNK2019 при сборке проекта. #4
Цитата Сообщение от Bers Посмотреть сообщение
У вас в DSAA.h прототип, а в DSAA.cpp - реализация.

В отличие от обычных классов так делать с шаблонами нельзя.
Хм, прискорбно это слышать, так как я привел всего лишь крохотный отрывок из класса. На самом деле класс имеет сложную иерархическую структуру, реализацию которой выводить в заголовочный файл довольно таки накладно и на мой взгляд не эстетично.
Для тех, кто столкнулся с подобной проблемой, я поделюсь своими исследованиями данного вопроса:
На stackoverflow было задано множество подобных вопросов. Ответ, на один из них полностью раскрывает проблему и приводит различные варианты решения, прочитать которые можно здесь. Также автор ссылается на тему, которая наиболее полно раскрывает причину и решения данной проблемы. Тему можно найти здесь.
Спасибо за ответ.
Yandex
Объявления
18.11.2011, 22:04     Ошибка LNK2019 при сборке проекта.
Ответ Создать тему
Опции темы

Текущее время: 19:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru