我正在尝试将本地构造的(内部方法)cv::Point3i
emplace_back移植到对象变量(声明为std::vector<cv::Point>
)上。这样做,我得到编译错误(不是运行时):
memory - No matching constructor for initialization of 'cv::Point_<int>'
使用Point2i尝试相同的操作(省略我需要的值之一),编译器不会抛出任何错误。
这是来自.cpp文件的片段:
void ObjectDetector::centroids2Dto3D() {
const int* map_ptr = (int*)mapHeight.data;
unsigned long steps[2];
steps[0] = mapHeight.step1(0);
steps[1] = mapHeight.step1(1);
for (std::vector<cv::Point>::iterator it = centroidsXZ.begin(); it != centroidsXZ.end(); it++) {
const int x = (*it).x;
const int z = (*it).y;
int y = map_ptr[steps[0] * x + steps[1] * z];
// MARK: The following line causes the error. Without it, the program compiles fine
centroids.emplace_back(cv::Point3i(x,y,z));
}
}
由于我不是最好的调试C ++,我倾向于把错误放在我的编码上,但我在这里找不到问题。
有人能指出我的解决方案或途径吗?
谢谢!
答案 0 :(得分:1)
由于您要插入cv::Point3i
类型的矢量对象,因此centroids
的类型应为:std::vector<cv::Point3i>
。
此外,您正在调用emplace_back
错误。它的论点应该是转发给Point3i
的构造函数的论据,即:centroids.emplace_back(x,y,z);
使用emplace_back
将避免使用push_back
时所需的额外复制或移动操作。您可以找到更多详细信息here。