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

Share C++ struct between two files

本文关键字:之间 共享 C++ 结构 文件 两个      更新时间:2023-10-16

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

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

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

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

整个过程如下所示:

Java 代码 ->调用 i.cpp 并分配值 ->

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

Java 代码 ->调用 i.cpp 并分配值 ->

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

正确

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

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

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

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

执行此操作的方法是在标头中声明对象并仅在一个位置定义它。这在标题中:

extern A structA;

这位于要初始化它的源文件中:

A structA;