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

时间:2013-01-18 15:39:20

标签: c++ xcode duplicates

这是我的代码:

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会抛出此错误,我该如何纠正呢?

3 个答案:

答案 0 :(得分:6)

您在标题中定义全局变量,它会破坏 one definition rule 包含标题的每个TU都有自己的对象副本。

您需要使用extern关键字:

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

    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设置为否。