未解析的外部符号错误,即使 IDE 定义并查看了函数

Unresolved external symbol error, even if function is defined and seen by IDE

提问人:Flavio 提问时间:3/4/2015 更新时间:3/4/2015 访问量:1879

问:

使用 Visual C++ 2008,我有一个“未解析的外部符号”,即使使用 IDE 我可以正确查看函数的声明和定义:

错误:

hook_file.obj : error LNK2001: unresolved external symbol "int __cdecl is_directory_objattr(struct _OBJECT_ATTRIBUTES const *)" (?is_directory_objattr@@YAHPBU_OBJECT_ATTRIBUTES@@@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 文件包括带有声明的头文件。
  • 声明和定义是相同的。
  • 所有文件都列在项目文件中。

知道怎么了吗?

谢谢!

C++ visual-studio-2008 未解析的外部

评论

1赞 Cory Kramer 3/4/2015
这是链接错误,而不是编译错误。检查您的项目是否链接到他们需要的任何库。
0赞 Axel 3/4/2015
检查链接器设置。
0赞 Flavio 3/4/2015
不需要外部库,生成错误的函数在我的项目中编码,您可以在我的问题中阅读。链接器设置没有任何错误。就像 IDE 可以看到 cpp 文件中的函数定义,但链接器看不到一样。
0赞 Khouri Giordano 3/4/2015
从你给的来看,它看起来还不错。你确定链接器正在得到吗?misc.obj

答:

0赞 Sebastien 3/4/2015 #1

您是否只包含一次头文件?

在 misc.h 中

#ifndef MISC
#define MISC

...

#endif MISC ?