2015-03-03 4 views
1

с использованием 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 с определением функции включает заголовочный файл с объявлением.
  • Декларация и определения идентичны.
  • Все файлы перечислены в файле проекта.

Любая идея, в чем не так?

Спасибо!

+1

Это ошибка линковки, не ошибка компиляции. Убедитесь, что ваши проекты связаны с любыми библиотеками, в которых они нуждаются. – CoryKramer

+0

Проверьте настройки компоновщика. – Axel

+0

Нет внешних библиотек, функция, которая генерирует ошибку, кодируется в моем проекте, как вы можете прочитать по моему вопросу. Настройки компоновщика не имеют ничего плохого. Как будто IDE может видеть определение функции в файле cpp, но компоновщик этого не делает. – Flavio

ответ

0

Включены ли вы только один раз в заголовок?

в misc.h

#ifndef MISC 
#define MISC 

... 

#endif MISC ?