Показать полную графическую версию : Ошибка компиляции LNK2019
Решил написать небольшой велосипед для работы с форматом BMP. Написал структуры данных, пытаюсь скомпилить - получаю error LNK2019.
Код: http://pastebin.com/cLcJ3mAJ
belk94 компиляция как раз проходит. LNK это ошибка линковки.
В данном коде void main должна хоть как-то определенна.
Например
void main
{
}
Это избавит в будущем от потенциальной ошибки LNK1561: entry point must be defined
По данной ошибке (LNK2019 unresolved external symbol 'symbol' referenced in function 'function'), возможно пути к Lib не определенны.
Admiral, что означает "пути к Lib"?
belk94 вот на этом скриншоте (http://farm2.static.flickr.com/1121/1432608302_2d58873cd4_o.png) строка Additional Library Directories
Скрин отсюда (http://groups.google.com/group/mysql-udf-repository/web/creating-and-compiling-udfs-using-microsoft-visual-studio-express) для 2005й версии Visual C++, в 2008 так же.
Добираться так: Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show directories for: -> Library files.
Это всего лишь предположения, если проект состоит только из этого файла, а с путями всё ОК выведется ошибка LNK1561, а не LNK2019.
А какой полностью текст ошибки?
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
А с библиотеками всё в порядке - на этой же Студии уже делал несколько проектов.
El Scorpio
20-09-2010, 07:18
Написал структуры данных, пытаюсь скомпилить - получаю 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; // вот так
}
Отсутствуют параметры вызова у функций »
А они нужны? Функции будут использоваться так (для примера):
WORD a;
a=10;
a.print();
Параметры функции main не соответствуют стандартным »
Параметры не будут нужны. Сколько я делал проектов - их нигде не было.
Методы 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
belk94, конечно, это не так важно, но возвращение результата в функциях operator= (а также +=, -= и т.д.) позволяет использовать его в составных командах.
a = b = c;
F (a += b);
(a -= b).M();
Цитата El Scorpio:
Отсутствуют параметры вызова у функций »
А они нужны? Функции будут использоваться так (для примера): »
А вот это уже важно.
Если в каком-либо файле директивами предпроцессора будут заданы другие параметры вызова функций, то в результате на этапе линковки компилятор не найдёт в объектном модуле нужной функции
El Scorpio, у меня слишком простая программа для всего этого.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.