gpt4 book ai didi

C++ 多重定义错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:45 31 4
gpt4 key购买 nike

我不想创建一堵代码墙,所以如果您需要任何代码,请询问,我会发布。我收到多个定义错误,我不知道为什么。我相信错误的发生是因为我试图在一个头文件中声明一个变量(并在同一个头文件中为它创建一个对象)然后在 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com