2013-05-02 21 views
6

2つのcppファイル(A.cppとB.cpp)の間でいくつかのベクトル変数(V1とV2)を共有(グローバル化)したいと思います。 次のコマンドで、A.hでV1とV2の両方を定義しました。複数のC++ファイルの中の共有ベクトル変数

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

また、#include "A.h"をA.cppファイルとB.CPPファイルの両方に追加しました。誰も私にこれらのCPPファイルの両方のV1とV2の要素にアクセスできるようにするために何をすべきか教えてください。

ありがとうございます

答えて

7

まず、ベクターを定義する場所を選択する必要があります。 A.cppを選択したとします。 - A.cpp

グローバル変数としてベクトルを定義する(一方のみのファイルに複数の定義されたシンボル・エラーをもたらす複数のファイルに同じオブジェクトを定義する):B.cpp

vector<uint64_t> V1; 
vector<uint64_t> V2; 

を(および他のすべてのファイルにそこからV1V2にアクセスしたい)ベクトルをexternと宣言します。これは、実際のオブジェクトのために他の場所で検索するようにリンカーに指示します:

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

を今、リンクステップV1B.cppからV2で(を定義したり、これらのオブジェクトがあるwhereever V1V2A.cppからに接続されます。

+2

定義を含む* all *コンパイル単位に含まれるヘッダーに宣言を入れる方がよいでしょう。こうすることで、コンパイラは定義と宣言が一致するかどうかを確認できます。 –

2

externは、これが変数のみを宣言し、変数を定義しないことを意味します。これらの変数の正確な定義は、ソースファイルの一部(ヘッダーではない)のどこかに正確に必要です。 DEFINITIONはDECLARATIONと全く同じように見えます。extern

2

ヘッダファイルに宣言を作成しました。 1つのコンパイル単位(.cppファイル)で定義を作成する必要があります。

だから、.cppファイルを選んでそこに定義を入れてください。この場合、定義はexternキーワードを除いて宣言と同じです。

vector<uint64_t> V1; 
vector<uint64_t> V2; 
関連する問題