0

2 つのファイル間で C++ 構造体を共有したいと考えています (Android-NDK プログラミングのコンテキストで)。最初のものでは構造体が初期化され、他のものでは最終的に使用されます。

そこで、ヘッダー ファイル struct.h (両方の .cpp ファイルに含めます) で構造体を定義し、それを静的変数として宣言します。

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

static A structA;

次に、最初の i.cpp ファイルで値を割り当てます。例: Av = 5。

全体のプロセスは次のようになります。

Java コード -> i.cpp を呼び出して値を割り当てる -> Java コード -> j.cpp を呼び出して値を読み取る -> 間違っている

しかし

Java コード -> i.cpp を呼び出して値を割り当てる -> Java コード -> i.cpp を呼び出して値を読み取る -> 正しい

4

2 に答える 2

2

static変数を宣言するときのキーワードが原因ですstructA。これにより、ヘッダー ファイルが含まれる各ソース ファイルで変数が一意になります。

externの代わりに変数を宣言し、staticそれを 1 つのソース ファイルで (staticまたはなしでextern) 定義すると、それが機能することがわかります。

于 2012-12-05T13:18:11.253 に答える
0

まず、共有したいのはオブジェクトであり、構造体ではありません。構造体は、オブジェクトの型を定義します。

第二に、static「これを他の翻訳単位と共有しないでください」という意味です。それがないと、重複した定義についてリンカーから苦情が寄せられたので、そこに貼り付けたに違いありません。

これを行う方法は、ヘッダーでオブジェクトを宣言し、それを 1 か所だけで定義することです。これはヘッダーに入ります:

extern A structA;

そして、これを初期化したいソースファイルに入れます:

A structA;
于 2012-12-05T13:19:44.250 に答える