使用代码$ 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 extern中创建int a
甚至在函数声明后包含#include "b.cpp"
,但错误仍然存在。
请帮助我,并提供一些解释为什么我的方法不成功的原因。 谢谢
答案 0 :(得分:2)
您定义了两次变量,即在翻译单元a
和a.cpp
中定义了名为b.cpp
的变量。这违反了一个定义规则。
如果要在不同翻译单元之间共享变量,请在一个变量中定义变量,而在另一个变量中声明:
// a.cpp:
int a;
...
// b.cpp:
extern int a;
...
但是,如果要使两个变量具有相同的名称,或者只是想避免意外的名称冲突,请使用static
使“全局”变量仅对相应的翻译单元可见,或引入名称空间。请注意,然后您有两个不相同的值的两个变量。