为PAL.h中的函数指针获取“已在GUI.obj中定义”的LNK2005
//GUI.cpp
#include "PAL.h"
//PAL.h
#define PAL_INCLUDE
int (*addPAL)( int, void(*)(), void(*)() );
//main.cpp
#include "GUI.h"
#ifndef PAL_INCLUDE
#include "PAL.h"
#endif我是否误解了includes和#ifndef的本质
发布于 2011-12-01 07:22:36
出现这个错误可能是因为预处理器在处理GUI.cpp之前正在处理main.cpp。尝试将PAL.h的内容更改为以下内容:
#ifndef PAL_INCLUDED
#define PAL_INCLUDED
// definitions
#endif参考
Include guard
发布于 2011-12-01 07:21:33
我认为你应该使用include guard而不是PAL.h。
如果我理解你想做什么的话,这段代码要清晰得多(也很常见):
GUI.h
#ifndef _GUI_H_
#define _GUI_H_
...
#endifGUI.cpp
#include "PAL.h"
...PAL.h
#ifndef _PAL_H_
#define _PAL_H_
int (*addPAL)( int, void(*)(), void(*)() );
#endifmain.cpp
#include "GUI.h"
#include "PAL.h"
...希望能有所帮助。
发布于 2011-12-01 07:29:37
Main.cpp和GUI.cpp是分开编译的,然后链接在一起。这意味着在两次编译之间预处理器状态被重置,并且丢失了PAL_INCLUDE的定义
标头保护阻止同一编译单元中的其他标头多次包含一个标头,而不是为了防止链接器中的冲突。
尝试将static放在方法声明的前面-它将函数限制为当前单元,从而防止了此问题。有关更多信息,请参阅What is a “static” function?
https://stackoverflow.com/questions/8334416
复制相似问题