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

C++ 在多个文件中使用全局变量,c++,global-variables,linker-errors,C++,Global Variables,Linker Errors,我有一个使用cocos2d-x库的项目,其中包含很多类。我有一个包含全局向量的.h文件。我想在程序在简介页类中启动时初始化它。简介页面类有一个图形表面和一个加载器。然后我想在我的主类中使用这个向量。全局向量的代码如下所示: //globals.h #ifndef _GLOBAL_H #define _GLOBAL_H #include <vector> vector<int> a; #endif //globals.h #ifndef(全球) #定义_全局_H #包括

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

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

vector<int> a;
#endif
//globals.h
#ifndef(全球)
#定义_全局_H
#包括
载体a;
#恩迪夫
我在介绍页面类中使用push_back。我使用了外部静态关键字。我的程序出现运行时链接器错误,它说您的向量已在appDelegate类(cocos2d的基类)中声明。当我把一个静态关键字放在后面时,它不会给我链接器错误,但它不能正常工作。

如何更正此错误?如果你有其他想法而不是这个,请分享。谢谢。

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

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

extern std::vector<int> a;
std::vector<int> a;
extern标准::向量a;
在一个源代码文件中,执行以下操作:

extern std::vector<int> a;
std::vector<int> a;
std::向量a;

您应该有如下设计:

共享.cpp

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

注意,既然您使用C++,可以使用类作为命名空间来避免全局命名空间的混乱,例如:

共享.cpp

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

我现在在一个代码库工作,那里有数百个随机分布的全局代码。到处都是外部关键词,非常难看。使用类将全局变量包装为静态成员变量,或者至少将其隔离到头文件,如下所示。全局/外部对不是优雅的IMHO。