我想在两个cpp文件(A.cpp和B.cpp)之间共享(全球化)一些向量变量(V1和V2)。 我已经通过以下命令在A.h中定义了V1和V2。
extern vector<uint64_t> V1;
extern vector<uint64_t> V2;
我还在A.cpp和B.CPP文件中添加了#include“A.h”。任何人都可以让我知道我还能做些什么才能在这两个CPP文件中访问V1和V2的元素?
先谢谢
答案 0 :(得分:10)
首先,您需要选择应该定义矢量的位置。假设您选择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
和来自V2
的{{1}}将与来自B.cpp
的{{1}}和V1
相关联(或这些对象定义)。
答案 1 :(得分:2)
extern
意味着这只是声明变量,它不会定义它们。在某些源文件(不是标题)中的某个地方,您只需要一个这些变量的定义。 DEFINITION看起来与没有extern
答案 2 :(得分:2)
您已在头文件中创建了一个声明;现在需要在单个编译单元(.cpp文件)中创建定义。
所以选择.cpp文件,并将定义放在那里。在这种情况下,定义与声明相同,但没有extern
关键字。
vector<uint64_t> V1;
vector<uint64_t> V2;