簡體   English   中英

在向量中找到對象時出錯

[英]Error in finding object in vector

我有一個Point類,在其中通過執行Point p(a, b)創建每個對象,並且我想查找Point是否存在於我聲明為vector<Point> vPoint

我的代碼段如下:

Point p(a, b);
vector<Point>::iterator it = find(vPoint.begin(), vPoint.end(), p);
if(it != vPoint.end())
{
   // do something
}      

我收到的錯誤消息如下; 在包含的文件中

/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,

所以我想知道這個問題是否是由於在創建對象/迭代器時不使用指針而不支持指針未指向的對象或其他原因。

C ++不會自動創建比較運算符,因此必須定義兩個點相等意味着什么。 例如,合理的實現可以是:

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

還要注意,如果您的代碼需要它,則還必須實現operator !=因為如果給定==則C ++不會自動實現!= ,反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM