gpt4 book ai didi

c++ - ' ' 的多重定义首先在这里定义错误

转载 作者:行者123 更新时间:2023-11-30 03:19:56 25 4
gpt4 key购买 nike

我在使用代码 $ g++ a.o b.o -o a 时遇到错误:

b.o:(.bss+0x0): multiple definition of `a'
a.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

注意:b.cpp定义了变量int a

文件 a.cpp 是:

#include<iostream>
using namespace std;
void func();
int a;
int main(){
func();
cout << a << endl;
return 0;
}

文件 b.cpp 是:

#include<iostream>
using namespace std;
int a;
void func(){
a = 100;
}

我尝试通过 extern int a; 将 a.cpp 中的 int a 设置为 extern甚至在函数声明后包含 #include "b.cpp" 但错误仍然存​​在。

请帮助我并提供一些解释为什么我的方法不成功。谢谢你

最佳答案

您定义了一个变量两次,即名为a 的变量定义在翻译单元a.cppb.cpp 中。这违反了单一定义规则。

如果你想在不同的翻译单元之间共享一个变量,在一个中定义它,然后在另一个中声明:

// a.cpp:
int a;
...

// b.cpp:
extern int a;
...

但是,如果您希望有两个具有相同名称的变量,或者只是想避免意外的名称冲突,请使用 static 使“全局”变量仅对相应的翻译单元可见,或者引入命名空间。请注意,您随后有两个不同的变量,它们不共享一个公共(public)值。

关于c++ - ' ' 的多重定义首先在这里定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53280942/

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