0

我想在两个文件之间共享一个 C++ 结构(在 Android-NDK 编程的上下文中)。在第一个中,结构被初始化,而在另一个中,它最终被使用。

所以我在头文件 struct.h 中定义结构(我包含在两个 .cpp 文件中)并将其声明为静态变量:

struct A {
   int v;
   A(){
    v = 0;
   }
}

static A structA;

然后我在第一个 i.cpp 文件中为其分配一个值,例如:Av = 5。但是当我在第二个 j.cpp 中调用它时,它仍然是 0。

整个过程是这样的:

Java 代码 -> 调用 i.cpp 并赋值 -> Java 代码 -> 调用 j.cpp 并读取值 -> 错误

Java 代码 -> 调用 i.cpp 并赋值 -> Java 代码 -> 调用 i.cpp 并读取值 -> 正确

4

2 回答 2

2

这是因为static声明变量时的关键字structA。这使得该变量在包含头文件的每个源文件中都是唯一的。

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

于 2012-12-05T13:18:11.253 回答
0

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

其次,static意思是“不要与其他翻译单位共享”。我敢打赌你把它卡在那里,因为没有它你会从链接器那里得到关于重复定义的投诉。

这样做的方法是在标头中声明对象并仅在一个地方定义它。这在标题中:

extern A structA;

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

A structA;
于 2012-12-05T13:19:44.250 回答