0

main.cpp といくつかのクラスがあり、それぞれがヘッダーと .cpp ファイルの 2 つのファイルで定義されています。main.cpp には 2D ベクトルがあります。クラスのメンバー関数でこのベクトルを使用したいのですが、最初にメイン ファイルをインクルードしようとしましたが、再定義エラーが発生しました。その後、別の .h ファイルでベクトルを定義しようとしました。しかし、それもうまくいきませんでした。メンバー関数が行った変更を保存できるように、いくつかのクラスの定義でこのベクトルを使用するにはどうすればよいですか。

残念ながら、ベクトルはグローバルです!

詳細については、このベクトルはゲームのボードです。このゲームにはいくつかのオブジェクトがあります: モンスター、人間、宝物、いくつかのトラップ。ボードはメイン関数の前にグローバルに定義されています。このボードを使用する main.cpp にはいくつかの関数があり、上記の 3 行で言及したクラスは、メンバー関数でこのボードを使用します。

'extern' を使用したソリューションですか?(それが何かわかりません。回答で見ただけです!-それがソリューションである場合は、それについて検索する必要があります。)

4

2 に答える 2

0

メイン.cpp

#include <vector>

std::vector<std::vector<int>> myArray;

int main(int argc, char **argv)
{
   // blah...
   myArray.add(5);
}

そしてあなたの他のファイルで:

#include <vector>

extern std::vector<std::vector<int>> myArray;

externキーワードを使用すると、コンパイラに「このオブジェクトはここにありません。存在しません... でも心配しないでください! リンカがコンパイルされたオブジェクトをアセンブルすると見つかるはずです!」と伝えることができます。

また、「extern」キーワードを使用してシリアル化されたデータをロードすることもできます (画像のバイナリ データを含む .c ファイルを作成する bmp2c など)。

編集: また、2 つのオブジェクトの名前がまったく同じであることが重要です (大文字と小文字が区別されます)。

于 2013-04-03T17:20:42.150 に答える
0

次のように書くこともできます:

ああ

extern vector< vector<int> > vec2D; //declare the 2d vector here

a.cpp

#include "a.h"    
vector< vector<int> > vec2D;  //define the 2d vector here

main.cpp

#include "a.h"
//use the 2d vector here
于 2013-04-03T17:11:17.127 に答える