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

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

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

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

18.11.2011, 13:02. Просмотров 759. Ответов 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 и создав там экземпляр класса), то оно работает корректно само по себе.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 13:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка LNK2019 при сборке проекта. (C++):

Ошибка при сборке проекта: "error LNK2019: unresolved external symbol" - C++
Все части проекта успешно компилируются , но при сборке появляются ошибки: 1&gt;prakt2.obj : error LNK2019: unresolved external symbol...

Ошибка при сборке небольшого проекта. undefined reference to - C++
Здравствуйте. Задача программы - подсчет сколько раз в строке встречается каждый символ. Что-то вроде map, только список объектов класса....

Ошибка при сборке проекта - invalid use of non-static data member 'MainWindow::test' - C++
Собственно, сабж. Собираю в QtCreator, но по-моему ошибка не имеет к нему никакого отношения. Возможно я просто не понимаю, как правильно...

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf" - C++
Сделал многофайловую программу программу, вот она: //golf.h #include &lt;iostream&gt; #ifndef golg_h_ #define golf_h_ const int Len =...

Code::Blocks, ошибки при сборке проекта, использующего OpenGL - C++
Всем привет! У меня вот такие ошибки: ||=== Build: Debug in test6 (compiler: GNU GCC Compiler) ===| obj\Debug\test6Main.o||In...

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка? - C++
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.11.2011, 13:04 #2
http://msdn.microsoft.com/ru-ru/library/799kze2z.aspx
0
Bers
Заблокирован
18.11.2011, 13:11 #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
...
1
greshnikk
31 / 31 / 0
Регистрация: 05.11.2008
Сообщений: 162
18.11.2011, 22:04  [ТС] #4
Цитата Сообщение от Bers Посмотреть сообщение
У вас в DSAA.h прототип, а в DSAA.cpp - реализация.

В отличие от обычных классов так делать с шаблонами нельзя.
Хм, прискорбно это слышать, так как я привел всего лишь крохотный отрывок из класса. На самом деле класс имеет сложную иерархическую структуру, реализацию которой выводить в заголовочный файл довольно таки накладно и на мой взгляд не эстетично.
Для тех, кто столкнулся с подобной проблемой, я поделюсь своими исследованиями данного вопроса:
На stackoverflow было задано множество подобных вопросов. Ответ, на один из них полностью раскрывает проблему и приводит различные варианты решения, прочитать которые можно здесь. Также автор ссылается на тему, которая наиболее полно раскрывает причину и решения данной проблемы. Тему можно найти здесь.
Спасибо за ответ.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 22:04
Привет! Вот еще темы с ответами:

Ошибка при компиляции error LNK2019 - C++
IMG.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;unsigned long __cdecl GTASA_CRC32_fromUpCaseString(char const *)&quot;...

Ошибки компиляции "unresolved external symbol" при сборке проекта с dlib - C++
собираю решение, выдает кучу ошибок, хотя сам код был скопирован из примеров к библиотеке dlib на официальном сайте, по идее ошибок быть не...

Ошибка LNK2019 При динамическом создании объекта - C++
Это хидер который я создал #include&lt;math.h&gt; #define PI 3.14 class Figure { public: Figure(); virtual ~Figure();

Ошибка при сборке - C++
Здравствуйте. Пытаюсь скомпилировать https://github.com/fireice-uk/xmr-stak-cpu в Code Blocks. При сборке выдает ошибку:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.11.2011, 22:04
Ответ Создать тему
Опции темы

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