2017-02-27 4 views
2

動作しません、ここに私のコードエクスターナルが、私はグローバルのようにベクトル変数を使用しようと、別のファイルにそれを使用することをexterningい

ヘッダファイルでありますファイルにはベクトル変数の定義がありません。

MAIN.CPP

std::vector<Point2f> obj_corners(4); 

functions.cpp

extern std::vector<Point2f> obj_corners(4); 

私は、次のエラーを取得していますが:

errorLNK:2005:.....already defined in functions.obj 
errorLNK1169: one or more multiply defined symbols found 

私はC++に新しいです、誰も私を助けてください可能性がありこっちで。

+0

ありがとうございます。問題は解決しました。 –

答えて

1

定義は次のようになります。

std::vector<Point2f> obj_corners(4); 

と、このようなextern宣言:

extern std::vector<Point2f> obj_corners; 

単に二文の間、最初の文は、実際に、ベクトルを作成するためにコンストラクタを使用していますベクターはどこかに存在すると言います。

2
extern std::vector<Point2f> obj_corners(4); 

あなたがイニシャライザを提供しているため、定義です。あなたのプログラムでobj_cornerを複数回定義すると、odr-ruleが怪我する。あなたの代わりに何をしたい、ODR-ルールに従うために、宣言です:

functions.cpp

extern std::vector<Point2f> obj_corners; 

これは単にそのリンカを伝える、あなたの翻訳単位にオブジェクトの名前obj_cornersを紹介します別の翻訳単位(この場合はmain.cpp)で定義されています。

extern std::vector<Point2f> obj_corners;   //declaration 

0

変更

extern std::vector<Point2f> obj_corners(4);   //definition 

あなたが初期化子を提供するのでextern std::vector<Point2f> obj_corners(4);定義ですので。必要なのは宣言です。このプログラム内の他の場所にベクトルが存在することをプログラムに知らせるだけです。

関連する問題