с использованием Visual C++ 2008, у меня есть «неразрешенный внешний символ», даже если с помощью IDE я могу правильно видеть и объявление и определение функции:Неразрешенная ошибка внешнего символа, даже если функция определена и увидена с помощью IDE
ошибка:
hook_file.obj : error LNK2001: unresolved external symbol "int __cdecl is_directory_objattr(struct _OBJECT_ATTRIBUTES const *)" ([email protected]@[email protected]@@Z)
Соответствующий код в hook_file.cpp:
#include "misc.h"
void handle_new_file(HANDLE file_handle, const OBJECT_ATTRIBUTES *obj)
{
if(is_directory_objattr(obj) == 0) {
// etc.
декларации в misc.h файле:
BOOL is_directory_objattr(const OBJECT_ATTRIBUTES *obj);
Определение в misc.cpp файле:
#include "misc.h"
BOOL is_directory_objattr(const OBJECT_ATTRIBUTES *obj)
{ //function body here }
Я действительно не понимаю, что компоновщик должен жаловаться здесь.
- Заголовок с объявлением функции включен в файл, который вызывает функцию.
- Файл cpp с определением функции включает заголовочный файл с объявлением.
- Декларация и определения идентичны.
- Все файлы перечислены в файле проекта.
Любая идея, в чем не так?
Спасибо!
Это ошибка линковки, не ошибка компиляции. Убедитесь, что ваши проекты связаны с любыми библиотеками, в которых они нуждаются. – CoryKramer
Проверьте настройки компоновщика. – Axel
Нет внешних библиотек, функция, которая генерирует ошибку, кодируется в моем проекте, как вы можете прочитать по моему вопросу. Настройки компоновщика не имеют ничего плохого. Как будто IDE может видеть определение функции в файле cpp, но компоновщик этого не делает. – Flavio