我想在两个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的元素?
在此先感谢
我想在两个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的元素?
在此先感谢
首先,您需要找到应该定义向量的位置。假设您选择A.cpp
。
在A.cpp
(只在一个文件 - 限定在多个文件中相同的对象会产生的多个定义的符号错误)限定矢量作为全局变量:
vector<uint64_t> V1;
vector<uint64_t> V2;
在B.cpp
(以及所有其它文件从该你想访问V1
和V2
)宣布载体为extern
。这会告诉链接器为实际的对象的其他地方进行搜索:
extern vector<uint64_t> V1;
extern vector<uint64_t> V2;
现在,在链接步骤V1
和从B.cpp
V2
将被连接到从A.cpp
的V1
和V2
(或徘徊无论这些对象是定义) 。
extern
意味着这只有DECLARES变量,它不会定义它们。您需要在某些源文件(而不是头文件)中的某处定义这些变量。 “DEFINITION”看起来与“DECLARATION”完全相同,但没有使用extern
您已在头文件中创建了一个声明;现在您需要在单个编译单元(.cpp文件)中创建定义。
所以选择一个.cpp文件,并将定义放在那里。在这种情况下,定义与声明相同,除非没有extern
关键字。
vector<uint64_t> V1;
vector<uint64_t> V2;
更好的是,将声明放在* all *编译单元中包含的标题中,其中包含包含定义的标题。这样编译器可以检查定义和声明是否匹配。 – 2013-05-02 23:52:34