Задать вопрос
@alex_ak1

Почему возникает ошибка lnk2001?

Делаю проект в студии 2010 экспресс и внезапно возникает ошибка lnk2001. Она, очевидно, возникает, потому что компилятор не может найти отдельно реализованные члены класса, но члены класса есть, файлы с ними в проекте, и эта ошибка иногда исчезает. А иногда появляется.
Сейчас у меня выглядит все так:
Заголовок

#ifndef _array_table_h
#define _array_table_h

#include "TData.h"
class TArrayTable : public TBaseTable
{
...
public:
TKey GetKey();
TData* GetValuePtr() ;
... другие методы, которые ведут себя аналогично

Реализация
TKey TArrayTable::GetKey()
{
return pRecs[CurPos].Key;
}
... другие методы, которые иногда не находятся при линковке


Я меняю файл data.h и пересобирается весь проект, при этом вываливается ошибка, на которую я и жалуюсь:
1>arr.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall TArrayTable::GetKey(void)" (?GetKey@TArrayTable@@UAEHXZ)"
1>arr.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class TData * __thiscall TArrayTable::GetValuePtr(void)" (?GetValuePtr@TArrayTable@@UAEPAVTData@@XZ)"
... еще такие-же ошибки

Теперь в cpp-файле с реализацией я комментирую код метода GetKey(), вываливается одна ошибка (а не десяток), что этот GetKey не найден (тут уже все логично, я же ее закоментировал)
1>arr.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall TArrayTable::GetKey(void)" (?GetKey@TArrayTable@@UAEHXZ)"

Раскоментирую, собираю, проект успешно собирается.
Если опять изменить файл data.h, то получу опять кучу ошибок, что методы не найдены при линковке.
В программе штук 5 аналогичных модулей, ошибка возникает только в этом.
Почему возникает эта ошибка и вообще - как это так, что компилятор иногда не компилирует?
  • Вопрос задан
  • 132 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы