Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ошибка компиляции LNK2019 (http://forum.oszone.net/showthread.php?t=185886)

belk94 19-09-2010 15:50 1499120

Ошибка компиляции LNK2019
 
Решил написать небольшой велосипед для работы с форматом BMP. Написал структуры данных, пытаюсь скомпилить - получаю error LNK2019.
Код: http://pastebin.com/cLcJ3mAJ

Admiral 19-09-2010 23:21 1499414

belk94 компиляция как раз проходит. LNK это ошибка линковки.
В данном коде void main должна хоть как-то определенна.
Например
void main
{
}

Это избавит в будущем от потенциальной ошибки LNK1561: entry point must be defined
По данной ошибке (LNK2019 unresolved external symbol 'symbol' referenced in function 'function'), возможно пути к Lib не определенны.

belk94 19-09-2010 23:25 1499417

Admiral, что означает "пути к Lib"?

Admiral 19-09-2010 23:43 1499429

belk94 вот на этом скриншоте строка Additional Library Directories
Скрин отсюда для 2005й версии Visual C++, в 2008 так же.
Добираться так: Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show directories for: -> Library files.

Это всего лишь предположения, если проект состоит только из этого файла, а с путями всё ОК выведется ошибка LNK1561, а не LNK2019.

А какой полностью текст ошибки?

belk94 20-09-2010 00:48 1499472

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

А с библиотеками всё в порядке - на этой же Студии уже делал несколько проектов.

El Scorpio 20-09-2010 07:18 1499559

Цитата:

Цитата belk94
Написал структуры данных, пытаюсь скомпилить - получаю error LNK2019. »

Это значит, что линковщик не может найти код функции в объектном файле. Причины могут быть разными
1. Функция-шаблон реализована в файле .cpp. Поскольку код такой функции создаётся для каждого из параметров по мере использования, её код должен быть помещён в .h
2. Код функции в библиотеке не был скомпилирован по причине неиспользования в самой библиотеке. (лечится добавлением особой команды, которую я уже не помню)
3. Не совпадают параметры вызова функции, указанные по-умолчанию в свойствах проекта программы и подключаемой библиотеки. Во избежание этого всегда надо указывать __fastcall или аналогичную команду.



В*данном проекте вижу следующие нестыковки
1. Отсутствуют параметры вызова у функций
2. Параметры функции main не соответствуют стандартным
3. Методы operator= должны возвращать ссылку на сам объект
Код:

WORD& operator = (int a)
{
                byte1=a>>8;
                byte2=(a<<8)>>8;
                return *this; // вот так
}


belk94 20-09-2010 19:39 1500118

Цитата:

Цитата El Scorpio
Отсутствуют параметры вызова у функций »

А они нужны? Функции будут использоваться так (для примера):
Код:

WORD a;
a=10;
a.print();

Цитата:

Цитата El Scorpio
Параметры функции main не соответствуют стандартным »

Параметры не будут нужны. Сколько я делал проектов - их нигде не было.

Цитата:

Цитата El Scorpio
Методы operator= должны возвращать ссылку на сам объект »

То же самое. Пример работающего оператора = для самописной длинной арифметики:
Код:

    void operator = (Long a)    //приравнять к длинному числу
    {
        for(int i=0;i<LONG_LEN;i++)
            num[i]=a.num[i];
    }


El Scorpio 22-09-2010 08:09 1501333

belk94, конечно, это не так важно, но возвращение результата в функциях operator= (а также +=, -= и т.д.) позволяет использовать его в составных командах.
a = b = c;
F (a += b);
(a -= b).M();


Цитата:

Цитата belk94
Цитата El Scorpio:
Отсутствуют параметры вызова у функций »
А они нужны? Функции будут использоваться так (для примера): »

А вот это уже важно.
Если в каком-либо файле директивами предпроцессора будут заданы другие параметры вызова функций, то в результате на этапе линковки компилятор не найдёт в объектном модуле нужной функции

belk94 22-09-2010 18:11 1501927

El Scorpio, у меня слишком простая программа для всего этого.


Время: 19:59.

Время: 19:59.
© OSzone.net 2001-