如何在多个.cpp和头文件中同时使用向量?

时间:2013-04-03 16:54:57

标签: c++

我有一个main.cpp和一些类,每个类都在两个文件中定义:头文件和.cpp文件。 在main.cpp中我有一个2d向量。我想在类的成员函数中使用此向量。我首先尝试包含主文件,但我收到了重新定义错误。之后,我试图在另一个.h文件中定义矢量。但那也不起作用。 那么我应该怎么做才能在定义某些类时使用这个向量,这样就可以保存成员函数所做的更改。

不幸的是,这个载体是全球性的!

有关更多信息,此向量是游戏的板。这个游戏有一些对象:怪物,人类,宝藏和一些陷阱。 电路板在主要功能之前定义为全局。 main.cpp中有一些使用这个板的函数,以及我上面提到的3行的类,在它们的成员函数中使用这个板。

是使用'extern'的解决方案吗?(我不知道它是什么,我只是在答案中看到它! - 如果它是解决方案,我应该搜索它。)

2 个答案:

答案 0 :(得分:0)

您可以这样写:

A.H

extern vector< vector<int> > vec2D; //declare the 2d vector here

<强> a.cpp

#include "a.h"    
vector< vector<int> > vec2D;  //define the 2d vector here

<强>的main.cpp

#include "a.h"
//use the 2d vector here

答案 1 :(得分:0)

Main.cpp的

#include <vector>

std::vector<std::vector<int>> myArray;

int main(int argc, char **argv)
{
   // blah...
   myArray.add(5);
}

并在您的其他文件中:

#include <vector>

extern std::vector<std::vector<int>> myArray;

使用 extern 关键字允许你告诉编译器“嘿,这个对象就在这里,它不存在......但不要担心!你会发现它一旦链接器汇编编译的对象!“。

您还可以使用“ extern ”关键字来加载序列化数据(例如bmp2c,它会生成包含图片二进制数据的.c文件)

编辑:此外,2个对象具有完全相同的名称(区分大小写)非常重要。