我想在两个文件之间共享一个C ++结构(在Android-NDK编程的上下文中)。在第一个中,struct被初始化,而在另一个中,它最终被使用。
所以我在头文件struct.h中定义了struct(我将它包含在两个.cpp文件中)并将其声明为静态变量:
struct A {
int v;
A(){
v = 0;
}
}
static A structA;
然后我在第一个i.cpp文件中为它分配一个值,例如:A.v = 5.但是当我在第二个j.cpp中调用它时,它仍然是0。
整个过程如下:
Java代码 - >打电话给i.cpp并指定值 - > Java代码 - >调用j.cpp并读取值 - >错
但
Java代码 - >打电话给i.cpp并指定值 - > Java代码 - >调用i.cpp并读取值 - >正确
答案 0 :(得分:2)
由于您声明变量static
时使用structA
关键字。这使得变量在每个源文件中都是唯一的头文件包含在其中。
如果您声明变量extern
而不是static
,并在一个源文件中定义它(没有static
或extern
),您应该会看到它有效。< / p>
答案 1 :(得分:0)
首先,您要分享的是对象,而不是结构。结构定义了对象的类型。
其次,static
表示“不与其他翻译单位分享”。我敢打赌你坚持在那里,因为没有它你会得到链接器关于重复定义的抱怨。
这样做的方法是声明标题中的对象,定义只在一个地方。这标题是:
extern A structA;
这将在您要初始化它的源文件中:
A structA;