2

这是我的代码:

class Foo
{
public:
    int bar;
};

Foo myFoo;

主文件

#include "A.h"
int main()
{
    myFoo.bar = 2;
    return 0;
}

Xcode 给了我错误(释义):

duplicate symbol _myFoo in main.o & A.o

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

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

4

3 回答 3

6

您在 header 中定义全局变量,它违反了一个定义规则
包含标头的每个 TU 都将拥有自己的对象副本。

您需要使用extern关键字:

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

extern Foo myFoo;

主文件

#include "A.h"

Foo myFoo;

XXXX.cpp

#include "A.h"
于 2013-01-18T15:40:35.303 回答
3

Foo myFoo;定义,而不是声明。用于extern Foo myFoo;声明并将定义移动到单个实现文件中。

于 2013-01-18T15:41:26.830 回答
0

确保您No Common Blocks在构建设置中设置为否。

于 2016-10-02T01:30:13.147 回答