std :: Vector的OpenCV点,没有push_back方法

时间:2016-07-15 13:50:49

标签: c++ opencv c++11 vector

免责声明:错误抛出是因为touchesY是从cv :: ParallelLoopBody继承的嵌套类的属性,它是一个const类,在本文中没有显示。解决方法详见答案。

我有这个std :: vector的cv :: Points3i,但每当我尝试push_back一个新值时就会出错,这就是没有&#34; push_back方法&#34;。< / p>

在头文件中声明:

std::vector<cv::Point3_<int>> touchesY;

在源文件中调用:

touchesY.push_back(cv::Point3_<int>(i/mask.step[0],0,i-x));

我已经包含了矢量库,我没有收到任何错误:

std::vector<int> vec;
vec.push_back(1);

有人能指出我做错了什么吗?谢谢!

错误是:没有匹配的成员函数来调用&#39; push_back&#39;。

正如@FirstStep所建议的那样,我将代码分解为:

cv::Point3_<int> temp(i/mask.step[0],0,i-x);
touchesY.push_back(temp);

我现在在第一行收到错误,说:没有用于初始化'std::vector<cv::Point3_<int>>'的匹配构造函数。

完整的错误消息:

  

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c ++ / V1 /向量:687:36:   候选人的功能不可行:&#39;这个&#39;参数的类型为&#39; const   std :: vector&gt;&#39;,但方法​​未标记为const   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/vector:685:36:   候选人的功能不可行:&#39;这个&#39;参数的类型为&#39; const   std :: vector&gt;&#39;,但方法​​未标记为const

2 个答案:

答案 0 :(得分:0)

我终于找到了错误。正如@NathanOlivier所指出的,这是一个基于上下文的错误。

基本上,我正在定义一个继承自cv :: ParallelLoopBody的嵌套类,它作为类型为stv :: vector的cv :: Point名为touchesY的属性。因为我继承自cv :: ParallelLoopBody,所以它被定义为const,这阻止我在其上调用push_back。

我通过将属性移动到基类来解决这个问题,然后我在创建嵌套类时传递引用,然后我用它来调用push_back。

非常感谢大家!

答案 1 :(得分:-3)

你能不能把它改成emplace_back并放弃cv::Point3_<int>