2
c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1840): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const triangle' (or there is no acceptable conversion) h:\kingston_backup\ocv\ocv\delaunay.h(281): could be 'triangle &triangle::operator =(const triangle &)' while trying to match the argument list '(const triangle, const triangle)' c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1853) : see reference to function template instantiation '_FwdIt std::_Remove_if,_Pr>(_FwdIt,_FwdIt,_Pr)' being compiled with [ _FwdIt=std::_Tree_unchecked_const_iterator,std::allocator,true>>>, _Mytree=std::_Tree_val,std::allocator,true>>, _Pr=triangleIsCompleted ] h:\kingston_backup\ocv\ocv\delaunay.cpp(272) : see reference to function template instantiation '_FwdIt std::remove_if,triangleIsCompleted>(_FwdIt,_FwdIt,_Pr)' being compiled with [ _FwdIt=std::_Tree_const_iterator,std::allocator,true>>>, _Mytree=std::_Tree_val,std::allocator,true>>, _Pr=triangleIsCompleted ]
我認爲這個問題是在傳遞參數給STL的remove_if()
,由編譯器錯誤的建議。我已經添加了以下注釋行:
//**** ERROR LINE
class triangleIsCompleted
{
public:
triangleIsCompleted(cvIterator itVertex, triangleSet& output, const vertex SuperTriangle[3])
: m_itVertex(itVertex)
, m_Output(output)
, m_pSuperTriangle(SuperTriangle)
{}
bool operator()(const triangle& tri) const
{
bool b = tri.IsLeftOf(m_itVertex);
if (b)
{
triangleHasVertex thv(m_pSuperTriangle);
if (! thv(tri)) m_Output.insert(tri);
}
return b;
}
};
// ...
triangleSet workset;
workset.insert(triangle(vSuper));
for (itVertex = vertices.begin(); itVertex != vertices.end(); itVertex++)
{
tIterator itEnd = remove_if(workset.begin(), workset.end(), triangleIsCompleted(itVertex, output, vSuper)); //**** ERROR LINE
// ...
}
什麼是'triangleSet'?也許它是'typedef std :: set'?看來'triangleSet :: begin()'和'triangleSet :: end()'方法返回了'const'迭代器,因此你不能修改這個集合。 –
2011-12-19 20:06:06
typedef multiset triangleSet; //三角形集合incase的類型def給出了任何線索 –
puneetk
2011-12-20 06:33:09