我正在编译2个C++文件.4如果包含头文件.问题是,当链接器尝试将文件链接在一起时,我不断收到"重复符号"错误.
这是我的文件.
main.h
int test2();
main.cc
#include "main.h" #include "test.h" int test2(int test) { return 0; } int main() { test2(test()); return 0; }
test.h
int hello = 10; int test();
test.cc
#include#include "test.h" using namespace std; int test() { cout << hello << endl; return 0; }
我想我做的事情很简单.有人可以指出我做错了什么.这是我编译文件的方式.
c++ main.cc test.cc -o main
这是我得到的错误:
duplicate symbol _hello in:
/var/folders/nj/568_95bj4dg9v11l_mksv_2m0000gn/T/main-3becdd.o
/var/folders/nj/568_95bj4dg9v11l_mksv_2m0000gn/T/test-e84473.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Igor Tandetn.. 9
在头文件中,声明变量:
extern int hello;
在一个源文件中,定义变量:
int hello = 10;
不要在头文件中定义变量 - 这相当于在包含头文件的每个源文件中定义它们,这就是导致链接器错误的原因.
在头文件中,声明变量:
extern int hello;
在一个源文件中,定义变量:
int hello = 10;
不要在头文件中定义变量 - 这相当于在包含头文件的每个源文件中定义它们,这就是导致链接器错误的原因.