2013-05-02 55 views
6

我想在两个cpp文件(A.cpp和B.cpp)之间共享(全局化)一些矢量变量(V1和V2)。 我已经通过以下命令在A.h中定义了V1和V2。多个C++文件中的共享矢量变量

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

我还在A.cpp和B.CPP文件中添加了#include“A.h”。任何人都可以让我知道我还应该做些什么才能在这两个CPP文件中访问V1和V2的元素?

在此先感谢

回答

7

首先,您需要找到应该定义向量的位置。假设您选择A.cpp

A.cpp(只在一个文件 - 限定在多个文件中相同的对象会产生的多个定义的符号错误)限定矢量作为全局变量:

vector<uint64_t> V1; 
vector<uint64_t> V2; 

B.cpp(以及所有其它文件从该你想访问V1V2宣布载体为extern。这会告诉链接器为实际的对象的其他地方进行搜索:

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

现在,在链接步骤V1和从B.cppV2将被连接到从A.cppV1V2(或徘徊无论这些对象是定义) 。

+2

更好的是,将声明放在* all *编译单元中包含的标题中,其中包含包含定义的标题。这样编译器可以检查定义和声明是否匹配。 – 2013-05-02 23:52:34

2

extern意味着这只有DECLARES变量,它不会定义它们。您需要在某些源文件(而不是头文件)中的某处定义这些变量。 “DEFINITION”看起来与“DECLARATION”完全相同,但没有使用extern

2

您已在头文件中创建了一个声明;现在您需要在单个编译单元(.cpp文件)中创建定义。

所以选择一个.cpp文件,并将定义放在那里。在这种情况下,定义与声明相同,除非没有extern关键字。

vector<uint64_t> V1; 
vector<uint64_t> V2;