2

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

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

vector<int> a;
#endif

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

4

2 回答 2

3

您应该有如下设计:

共享.cpp

vector<int> a;

共享.h

extern vector<int> a;

某处.cpp

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

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

共享.cpp

vector<int> Common::a;

共享.h

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

某处.cpp

#include "shared.h"
void code() {
  Common::a.push_back(10);
}
于 2013-01-30T16:52:36.063 回答
2

您可能有多个对象声明,但您应该只有一个定义。要做到这一点,使用extern来标记声明和缺少extern来标记定义。

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

extern std::vector<int> a;

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

std::vector<int> a;
于 2013-01-30T16:49:34.553 回答