воскресенье, 3 апреля 2011 г.

Немного о программировании. Error LNK2019: unresolved external symbol ...

Часто возникают проблемы с ошибкой "Error LNK2019: unresolved external symbol ..."
Эта ошибка до этого дня для меня была просто бичом при разработке - все дело в том, что её смысл был для меня просто напросто загадочен, а попытки дословно перевести не давали четкого понятия что же в самом деле не нравиться компилятору.
Помогла статья на сайте MSDN  (заметил сейчас что потихоньку начали стираться границы между русской и английской документацией)
Итого причины:

  1. Подключили заголовочный файл, но не подключили библиотеку. Для подключения библиотеки, к примеру glaux.lib нужно в начале какого-нибудь .cpp файла прописать
    #pragma comment (lib, "glaux.lib")
    Также можно в настройках проекта сделать тоже самое.
  2. Если ошибка и дальше возникает - читайте далее что пишет компилятор. К примеру он пишет:

    error LNK2001: unresolved external symbol "struct _AUX_RGBImageRec * textureCar" (?textureCar@@3PAU_AUX_RGBImageRec@@A)

    Безусловно, нам мало что скажет то скопище символов в скобках справа, но то, что находиться перед ними довольно много значит, а именно: Вы объявили о том, что где-то в проекте у вас будет инициализирован или определен объект типа AUX_RGBImageRec с именем *textureCar (то есть указатель на объект типа AUX_RGBImageRec). И следовательно вы должны убедиться, что вы действительно это сделали. Например такая ошибка будет если вы напишете:
    // LNK2019.cpp
    // ожидается ошибка LNK2019
    extern char B[100];   // B не доступен для линковщика
    int main() {
       B[0] = ' ';
    }
    
До того как я это узнал такая ошибка приводила к тому, что приходилось снимать стресс
И именно это мне хотелось сделать, когда утром опять не получилось сделать лабораторную по Java с её абстрактными классами и наследованием

Комментариев нет:

Отправить комментарий