C++ 在向量中查找对象时出错

C++ 在向量中查找对象时出错,c++,vector,iterator,C++,Vector,Iterator,我有一个点类,在这个类中,我通过点p(a,b)来创建每个对象,我想找出该点是否存在于我声明为向量vPoint的向量中 我的一段代码如下: Point p(a, b); vector<Point>::iterator it = find(vPoint.begin(), vPoint.end(), p); if(it != vPoint.end()) { // do something } 点p(a,b); 向量::迭代器it=find(vPoint.begin(),

我有一个
类,在这个类中,我通过
点p(a,b)
来创建每个对象,我想找出该点是否存在于我声明为
向量vPoint
的向量中

我的一段代码如下:

Point p(a, b);
vector<Point>::iterator it = find(vPoint.begin(), vPoint.end(), p);
if(it != vPoint.end())
{
   // do something
}      
点p(a,b);
向量::迭代器it=find(vPoint.begin(),vPoint.end(),p);
if(it!=vPoint.end())
{
//做点什么
}      
我得到的错误消息如下; 在文件中包括从

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream:38:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ios:216:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__locale:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:439:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:846:22: error: 
      invalid operands to binary expression ('Point' and 'const Point')
        if (*__first == __value_)
            ~~~~~~~~ ^  ~~~~~~~~
segmentpoints.cpp:72:33: note: in instantiation of function template specialization 'std::__1::find<std::__1::__wrap_iter<Point
      *>, Point>' requested here
                        vector<Point>::iterator it = find(vPoint.begin(), vPoint.end(), p);
                                                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:403:1: note: 
      candidate template ignored: could not match 'pair<type-parameter-0-0, type-parameter-0-1>' against 'Point'
operator==(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iterator:574:1: note: 
      candidate template ignored: could not match 'reverse_iterator<type-parameter-0-0>' against 'Point'
operator==(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iterator:866:6: note: 
      candidate template ignored: could not match 'istreambuf_iterator<type-parameter-0-0, type-parameter-0-1>' against 'Point'
bool operator==(const istreambuf_iterator<_CharT,_Traits>& __a,
/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin/。/include/c++/v1/iostream:38:
在/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin//包含的文件中/include/c++/v1/ios:216:
在/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin//包含的文件中,语言环境:15:
在/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin//包含的文件中/include/c++/v1/string:439:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/./include/c++/v1/算法:846:22:错误:
二进制表达式('Point'和'const Point'的操作数无效)
如果(*\uuuu first==\uuuuu值)
~~~~~~~~ ^  ~~~~~~~~
segmentpoints.cpp:72:33:注意:在函数模板专门化的实例化中,此处请求“std::\u 1::find”
向量::迭代器it=find(vPoint.begin(),vPoint.end(),p);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/。/include/c++/v1/utility:403:1:注意:
已忽略候选模板:无法将“对”与“点”匹配
运算符==(常数对和常数x,常数对和常数y)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/。/include/c++/v1/iterator:574:1:注意:
已忽略候选模板:无法将“反向迭代器”与“点”匹配
运算符==(常量反向迭代器和常量反向迭代器和常量反向迭代器)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/。/include/c++/v1/iterator:866:6:注意:
已忽略候选模板:无法将“istreambuf_迭代器”与“点”匹配
布尔运算符==(常量istreambuf_迭代器&u a,

因此,我想知道这个问题是否是因为在创建对象时不使用指针/迭代器不支持不是指针指向的对象,或者其他原因。

C++不会自动创建比较运算符,因此您必须定义两点相等的含义。例如,合理的实现可能是:

bool operator==(const Point& a, const Point& b) {
    return a.x == b.x && a.y == b.y;
}

注意,如果您的代码需要它,则必须执行<代码>运算符==/COD>因为C++没有自动实现<代码>!=<代码> >如果给出了代码> ==>代码>反之亦然.< /P>问题是由于模板代码无法应用<代码>运算符==/COD>到您定义的类<代码>点< /C> >,所以…NE一?为提供操作符重载提供不同的思路。如果我们有了<代码>点*/COD>,参数将是“代码> const点和*A,const点& *b< /COD> > @ MaReRo:一个代码>点*/COD>是指针,C++已经知道如何比较指针以获得相等性。注意,它会检查不同的东西。(即,具有相同坐标的两个不同点对象将进行不同的比较)。