c++ - 全局 vector 变量的 Extern 不起作用

标签 c++ global-variables extern

我正在尝试将 vector 变量用作全局变量并将其外部化以在另一个文件中使用它,这是我的代码

头文件:

using namespace cv;

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

我的头文件没有 vector 变量的定义。

main.cpp

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

函数.cpp

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

但是我收到以下错误:

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

我是 C++ 的新手,有人可以帮助我吗。

最佳答案

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

是一个定义,因为你提供了一个初始化器。在程序中多次定义 obj_corner 会伤害 odr-rule .相反,为了遵循 odr-rule ,您想要的是一个声明:

函数.cpp

extern std::vector<Point2f> obj_corners;

这只是将对象的名称 obj_corners 介绍给您的翻译单元,告诉链接器它是在另一个翻译单元(在本例中为 main.cpp )中定义的。

关于c++ - 全局 vector 变量的 Extern 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487521/

相关文章:

c++ - 检测是否正在执行 catch block

c++ - 在函数内部声明全局对象 (C++)

c++ - C 中的外部类型声明冲突

c++ - 数组中从 `int' 到 `int*' 的无效转换

c++ - 如何确保数据写入文件

xcode - Xcode 有监 window 口吗?

c++ - extern 关键字真的有必要吗?

c++ - 我可以在 C 中存储指向 C++ 类的指针吗?

c++ - 模板类型推导警告返回对本地临时对象的引用

javascript - 从谷歌地理编码API获取latLong