2012-12-05 44 views
0

我想在两个文件之间共享一个C++结构(在Android-NDK编程环境中)。在第一个结构被初始化,而另一个结束被使用。在两个文件之间共享C++结构

所以我限定在头文件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和阅读价值 - >正确

回答

0

首先,你想分享的是一个对象,而不是一个结构。该结构定义该对象的类型

二,static表示“不与其他翻译单位共享”。我敢打赌你坚持在那里,因为没有它,你从链接器得到了重复定义的投诉。

做到这一点的办法是声明对象在头和只在一个地方定义它。这正好在标题:

extern A structA; 

而且要初始化这正好在源文件中:

A structA; 
2

这是因为static关键字,当你声明变量structA。这使得每个源变量唯一文件头文件包含在。

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