这是我的代码:
A.H
class Foo
{
public:
int bar;
};
Foo myFoo;
的main.cpp
#include "A.h"
int main()
{
myFoo.bar = 2;
return 0;
}
Xcode给我错误(转述):
duplicate symbol _myFoo in main.o & A.o
我想将Foo myFoo
保留在A.h文件中。
那么为什么XCode会抛出此错误,我该如何纠正呢?
答案 0 :(得分:6)
您在标题中定义全局变量,它会破坏 one definition rule 包含标题的每个TU都有自己的对象副本。
您需要使用extern
关键字:
A.h
extern Foo myFoo;
main.cpp
#include "A.h"
Foo myFoo;
<强> XXXX.cpp 强>
#include "A.h"
答案 1 :(得分:3)
Foo myFoo;
是定义,而不是声明。使用extern Foo myFoo;
作为声明,并将定义移到单个实现文件中。
答案 2 :(得分:0)
确保在构建设置中将No Common Blocks
设置为否。