XCode:使用全局变量时出现重复的符号错误

Rya*_*uck 2 c++ xcode duplicates

这是我的代码:

class Foo
{
public:
    int bar;
};

Foo myFoo;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "A.h"
int main()
{
    myFoo.bar = 2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Xcode给我错误(转述):

duplicate symbol _myFoo in main.o & A.o
Run Code Online (Sandbox Code Playgroud)

我想保留Foo myFoo在Ah文件中.

那么为什么XCode会抛出这个错误,我该如何纠正呢?

Alo*_*ave 6

您在标头中定义全局变量,它会破坏一个定义规则.
包含标题的每个TU都有自己的对象副本.

您需要使用extern关键字:

  1. 在标头中将对象声明为extern.
  2. 定义一个且只有一个源文件.
  3. 在您想要使用全局变量的任何位置包含标题

extern Foo myFoo;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "A.h"

Foo myFoo;
Run Code Online (Sandbox Code Playgroud)

XXXX.cpp

#include "A.h"
Run Code Online (Sandbox Code Playgroud)