我有一个使用cocos2d-x库的项目,其中包含很多类。我有一个.h文件包含一个全局向量。我希望在程序在介绍页面类中启动时初始化它。介绍页面类有一个图形表面和一个加载器。然后我想在我的主类中使用该向量。全局向量的代码如下:
//globals.h
#ifndef _GLOBAL_H
#define _GLOBAL_H
#include <vector>
vector<int> a;
#endif
我在介绍页面类中使用push_back。我使用了 extern 和 static 关键字。我的程序发出运行时链接器错误,它说你的向量已在appDelegate类(cocos2d的基类)中声明。当我在其后面放置一个静态关键字时,它不会给我链接器错误,但它无法正常工作。
我怎样才能纠正这个错误?如果你有另一个想法而不是这个想法,请分享。谢谢。
答案 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;