''的多个定义在此首先定义错误

时间:2018-11-13 12:23:35

标签: c++

使用代码$ 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",但错误仍然存​​在。

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

1 个答案:

答案 0 :(得分:2)

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

如果要在不同翻译单元之间共享变量,请在一个变量中定义变量,而在另一个变量中声明

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

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

但是,如果要使两个变量具有相同的名称,或者只是想避免意外的名称冲突,请使用static使“全局”变量仅对相应的翻译单元可见,或引入名称空间。请注意,然后您有两个不相同的值的两个变量。