OpenCV,C++;:插入集合 我正在使用Ubuntu 11.04上的NETBeaS 6.9开发C++应用程序。我正在使用OpenCV 2.3.1。我想知道是否有人能告诉我这个代码有什么问题
OpenCV,C++;:插入集合 我正在使用Ubuntu 11.04上的NETBeaS 6.9开发C++应用程序。我正在使用OpenCV 2.3.1。我想知道是否有人能告诉我这个代码有什么问题,c++,list,opencv,netbeans-6.9,ubuntu-11.04,C++,List,Opencv,Netbeans 6.9,Ubuntu 11.04,void AddTriangle(CvPoint buf[3],set&V) { 三角形; 国际公司; for (inc=0; inc<3; ++inc) { triangle.v[inc].x=buf[inc].x; triangle.v[inc].y=buf[inc].y; } V.insert((const Triangle) triangle); for(inc=0;inc-std::_-Rb_-tree::_-M_-insert_-unique(const-Va
void AddTriangle(CvPoint buf[3],set&V)
{
三角形;
国际公司;
for (inc=0; inc<3; ++inc)
{
triangle.v[inc].x=buf[inc].x;
triangle.v[inc].y=buf[inc].y;
}
V.insert((const Triangle) triangle);
for(inc=0;inc-std::_-Rb_-tree::_-M_-insert_-unique(const-Val&)[带_-Key=sTriangle,_-Val=sTriangle,_-KeyOfValue=std:_-Identity,_-Compare=std::less,_-Alloc=std::allocator]。
/usr/include/c++/4.5/bits/stl_set.h:408:29:从'std::pair',Compare,typename(类型名)Alloc::rebind::other>实例化::const_迭代器,bool>std::set::insert(const value_type&)[带_Key=sTriangle,_Compare=std::less,_Alloc=std::分配器,typename std::_Rb(树)const(const)const(迭代器,value)sTriangle=sTriangle]'
三角形的定义如下
typedef struct sTriangle
{
CVV点[3];
}三角形;
任何帮助都将不胜感激,
Peter.STL无法区分集合中三角形的实例,它正在寻找重载“要将三角形
放入集合,必须实现比较运算符。否则集合无法分辨哪些值相等,哪些值不同
typedef struct sTriangle
{
CvPoint v[3];
bool operator<(const sTriangle& other) const;
} Triangle;
bool sTriangle::operator<(const sTriangle& other) const
{
// compare 'this' with 'other'
}
我觉得这不是完整的错误输出。应该有一行包含单词error
。当您检索其余的错误输出时,是否有理由不通过for(int inc=0;…)在本地对循环计数器进行范围限定?错误消息的其余部分是错误消息的其余部分是:/usr/include/c++/4.5/bits/stl_函数。h:230:22:错误:与“运算符”不匹配
typedef struct sCvPoint {
int x;
int y;
} CvPoint;
typedef struct sTriangle
{
CvPoint v[3];
} Triangle;
bool operator==(CvPoint const& left, CvPoint const& right)
{
return left.x == right.x && left.y == right.y;
}
bool operator<(CvPoint const& left, CvPoint const& right)
{
return left.x == right.x
? left.y < right.y
: left.x < right.x;
}
bool operator<(Triangle const& left, Triangle const& right)
{
return left.v[0] == right.v[0]
? left.v[1] == right.v[1]
? left.v[2] < right.v[2]
: left.v[1] < right.v[1]
: left.v[0] < right.v[0];
}