免责声明:错误抛出是因为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
答案 0 :(得分:0)
我终于找到了错误。正如@NathanOlivier所指出的,这是一个基于上下文的错误。
基本上,我正在定义一个继承自cv :: ParallelLoopBody的嵌套类,它作为类型为stv :: vector的cv :: Point名为touchesY的属性。因为我继承自cv :: ParallelLoopBody,所以它被定义为const,这阻止我在其上调用push_back。
我通过将属性移动到基类来解决这个问题,然后我在创建嵌套类时传递引用,然后我用它来调用push_back。
非常感谢大家!
答案 1 :(得分:-3)
你能不能把它改成emplace_back并放弃cv::Point3_<int>
?