当我编译时我有一个错误,我无法理解问题在哪里?
class Edge{
public:
int nid;
bool operator==(const Edge& edge) const {
return nid == edge.nid;
}
};
和问题
vector<Edge> edges;
vector<Edge>::iterator it;
it = find (edges.begin(), edges.end(), nid);
if( it != edges.end() )
edges.erase(it);
任何想法?!!!?
答案 0 :(得分:5)
find
会将==
中的Edge
类型的对象与nid
进行比较。我猜nid
类型为int
,除非您在operator==
和Edge
之间实施int
,否则无效。
您可以尝试:
it = find (edges.begin(), edges.end(), Edge(nid));
答案 1 :(得分:2)
您尚未描述问题的摘录症状,但我认为这与未定义operator!=
您可能希望将其定义为
bool operator!=(const Edge&edge)const {
return !(*this == edge);
}
如果你的find(...,nid)将nid作为整数参数,你可能还需要重载==运算符
bool operator==(const int&edge)const {
return this->nid == edge;
}
答案 2 :(得分:0)
您也可以重载运算符!=,或者只是否定if条件。
答案 3 :(得分:0)
假设nid与类中的类型相同,我假设您对find()的第三个参数的类型抱怨。我想你可以把它切换到:
vector<Edge>::iterator it = find (edges.begin(), edges.end(), edges.begin() + nid);