Что означает ошибка LNK2019 - PullRequest
1 голос
/ 14 марта 2011

Может кто-нибудь сказать мне, что означает следующая ошибка?

Ошибка 2 Ошибка LNK2019: неразрешенный внешний символ "public: class TLst & __thiscall TLst :: operator = (class TLst const &)"(?? 4? $ ​​TLst @ VTInt @@@@ QAEAAV0 @ ABV0 @@ Z) ссылка на функцию "public: void __thiscall TPair> :: GetVal (класс TInt &, класс TLst &) const" (? GetVal @? $TPair @ VTInt @@ V? $ TLst @ VTInt @@@@@@ QBEXAAVTInt @@ AAV? $ TLst @ VTInt @@@@@ Z) randomgraph.obj randomgraph

Ответы [ 3 ]

4 голосов
/ 14 марта 2011

В общем, это означает, что компоновщик видит ссылку на символ, но он нигде не может его найти - часто из-за отсутствия библиотеки или объектного файла.

В в этом случае это произошло потому, что вы реализовали функции-члены вашего шаблонного класса в файле .cpp - они должны быть реализованы в заголовке.

Шаблонный класс - это шаблон , а не класс. Когда компилятор увидит вас, используя, например, vector<int> f; создает новый класс vector<int> из шаблона vector. Например, чтобы создать vector<int>::size() он должен видеть реализацию size() в том месте, где создается экземпляр шаблона, и не может этого делать, если реализация size() отсутствует в заголовочном файле.

Вы можете обойти это путем явного создания экземпляра vector для int - тогда компилятор увидит явное создание экземпляра при компиляции файла cpp. Это лишает смысла иметь шаблон - он будет использоваться только для типов, которые вы предварительно определяете с явной реализацией. Итак, короткая история, всегда полностью реализуйте шаблоны в заголовочных файлах.

1 голос
/ 14 марта 2011

Unresolved external symbol означает, что есть ссылка, которую компоновщик не может найти. Обычно это происходит из-за того, что вы забыли добавить объектный файл или библиотеку к шагу ссылки. (Включение файла заголовка для класса недостаточно - вам также нужно добавить код реализации.)

0 голосов
/ 15 марта 2011

Эта проблема решена.В шаблонном классе TLst была объявлена ​​функция

TLst TLst :: operator = (const TLst &);

, но она не была определена.

Мне пришлось определитьфункция в моем файле .cpp.Я мог бы также определить это в моем заголовочном файле.

Спасибо за ответы.

Сомнатх

...