我不想创建一堵代码墙,所以如果您需要任何代码,请询问,我会发布。我收到多个定义错误,我不知道为什么。我相信错误的发生是因为我试图在一个头文件中声明一个变量(并在同一个头文件中为它创建一个对象)然后在 4 个不同的文件中使用它。对于每个文件我都使用头文件我得到了多重定义,我已经为您提供了关于为什么会发生这种情况的任何想法?
请询问是否需要更多信息来解决问题。
我在 Windows 7 上使用 Code::Blocks ide mingW 编译器和编程
编辑
谢谢大家的快速帮助,解决了我的问题 :D
最佳答案
不要在头文件中声明它(尽管从技术上讲,我的意思是不要在那里定义)。
在你的头文件中你应该有:
extern int variableIWantOneCopyOfOnly;
然后,在您要链接的单个 C 源文件中,放入:
int variableIWantOneCopyOfOnly;
前者会让您所有的源文件都知道该变量的存在,但不会为其分配空间。包含第二行的单个翻译单元将为其分配空间,链接器将修复对它的所有引用。
include guards 不会帮助多个定义,因为它们只会停止包含在一个翻译单元中。
我的意思是,如果您有以下文件:
xyz.h: xyz1.c: xyz2.c:
#ifnef XYZ #include "xyz.h" #include "xyz.h"
#define XYZ
int a;
#endif
然后你执行如下命令:
gcc xyz1.c xyz2.c
那么他们都将获得 a
的自己的拷贝,而不是共享拷贝,因为包含保护的范围是翻译单元,而不是创建的可执行文件链接器。
关于C++ 多重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422757/