我正在尝试将矢量变量用作全局,并将其外部用于另一个文件中,这是我的代码
标题文件:
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 :(得分: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)。
答案 1 :(得分:1)
定义应如下所示:
std::vector<Point2f> obj_corners(4);
和这样的extern声明:
extern std::vector<Point2f> obj_corners;
第一个语句实际上是使用构造函数来创建向量,而第二个语句只是说向量存在于某个地方。
答案 2 :(得分:0)
变化
extern std::vector<Point2f> obj_corners(4); //definition
到
extern std::vector<Point2f> obj_corners; //declaration
因为extern std::vector<Point2f> obj_corners(4);
是定义,因为您提供了初始值设定项。你需要的是一个声明,只是为了让程序知道该向量存在于该程序的其他地方。