在多个文件中使用全局变量

时间:2013-01-30 16:48:00

标签: c++ global-variables linker-errors

我有一个使用cocos2d-x库的项目,其中包含很多类。我有一个.h文件包含一个全局向量。我希望在程序在介绍页面类中启动时初始化它。介绍页面类有一个图形表面和一个加载器。然后我想在我的主类中使用该向量。全局向量的代码如下:

//globals.h
#ifndef _GLOBAL_H
#define _GLOBAL_H
#include <vector>

vector<int> a;
#endif

我在介绍页面类中使用push_back。我使用了 extern static 关键字。我的程序发出运行时链接器错误,它说你的向量已在appDelegate类(cocos2d的基类)中声明。当我在其后面放置一个静态关键字时,它不会给我链接器错误,但它无法正常工作。
我怎样才能纠正这个错误?如果你有另一个想法而不是这个想法,请分享。谢谢。

2 个答案:

答案 0 :(得分:3)

你应该有如下设计:

<强> shared.cpp

vector<int> a;

<强> shared.h

extern vector<int> a;

<强> somewhere.cpp

#include "shared.h"
void code() {
  a.push_back(10);
}

请注意,由于您使用的是C ++,因此您可以使用类作为命名空间来避免混淆全局命名空间,例如:

<强> shared.cpp

vector<int> Common::a;

<强> shared.h

class Common {
  public:
    static vector<int> a;
}

<强> somewhere.cpp

#include "shared.h"
void code() {
  Common::a.push_back(10);
}

答案 1 :(得分:2)

您可能有多个对象声明,但您应该只有一个定义。要完成此操作,请使用extern标记声明,并且缺少extern来标记定义。

在您的标头文件中,执行以下操作:

extern std::vector<int> a;

在您的一个源代码文件中,执行以下操作:

std::vector<int> a;