在两个文件之间共享C ++结构

时间:2012-12-05 13:15:29

标签: c++ struct share

我想在两个文件之间共享一个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并读取值 - >正确

2 个答案:

答案 0 :(得分:2)

由于您声明变量static时使用structA关键字。这使得变量在每个源文件中都是唯一的头文件包含在其中。

如果您声明变量extern而不是static,并在一个源文件中定义它(没有staticextern),您应该会看到它有效。< / p>

答案 1 :(得分:0)

首先,您要分享的是对象,而不是结构。结构定义了对象的类型

其次,static表示“不与其他翻译单位分享”。我敢打赌你坚持在那里,因为没有它你会得到链接器关于重复定义的抱怨。

这样做的方法是声明标题中的对象,定义只在一个地方。这标题是:

extern A structA;

这将在您要初始化它的源文件中:

A structA;