2017-02-27 33 views
2

我試圖使用矢量變量全球和外擴它在另一個文件中使用它,這是我的代碼EXTERN全球矢量可變不起作用

頭文件

using namespace cv; 

typedef struct objectparamstruct 
{ 
    std::vector<KeyPoint> kp_object; 
    Mat des_object; 
    char label[10]; 
}objectparamstruct; 

我的頭文件沒有定義矢量變量。

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 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)中定義。

0

變化

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

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

因爲extern std::vector<Point2f> obj_corners(4);定義,因爲您提供的初始化。你需要的是一個聲明只是爲了讓程序知道矢量存在於這個程序的其他地方。