2017-11-05 14 views
-2

この 'find'アルゴリズムを動作させるには、正しくoperator==オーバーロード機能を取得できません。私がやっていることは、別のオブジェクトAddressBookのパラメータに、そのメンバ関数を使ってベクトル内にあるオブジェクトを削除するという、オブジェクト 'Contact'を渡すことです。それはもちろん、コンテナ内に見つかった場合です。定義が見つかったエラーのために連れて行ってくれたのはここC2678バイナリ '==':演算子が見つかりません。これは 'Contact'型の左辺オペランドをとります(または許容される変換はありません)?

void AddressBook::RemoveContact(Contact& delContact) 
{ 
    auto begin = container.begin(); 
    auto end = container.end(); 
    auto search = find(begin, end, delContact); 
    if (search != end) 
    { 
     cout << " Entry found to be deleted: " << *search << endl; 
    } 
    else 
    { 
     cout << " Entry was not found in address book." << endl; 
    } 
} 

です:

template<class _InIt, 
    class _Ty> inline 
    _InIt _Find_unchecked1(_InIt _First, _InIt _Last, const _Ty& _Val, 
false_type) 
    { // find first matching _Val 
    for (; _First != _Last; ++_First) 
     if (*_First == _Val) 
      break; 
    return (_First); 
    } 

は、私は、次のoperator==を追加する前に、私はこのエラーを得たことを覚えておいてください。それだけで悪化したことを後:

class AddressBook : public IAddressBook 
{ 
public: 
    AddressBook(); 
    void AddContact(Contact& newContact); 
    void RemoveContact(Contact& delContact); 
    void DisplayContacts(); 
    //Testing options here... 
    friend bool operator==(const Contact& lhs, const Contact& rhs) 
    { 
     //Working out the appropriate implementation... 
    } 
}; 

私はここで何か間違ったことをやっている知っているが、私はこれを実装する権利オブジェクト内だと確信しています。どんな助けも素晴らしいだろう。

+0

1として)[MCVE]してください。 2)左側のオペランドに 'Contact'をとる' operator == 'を実装しましたか(エラーメッセージが示唆しているように)? –

+0

私はAddressBookの中で友人機能を使って問題を救済しようとしましたが、問題はさらに悪化しています。私は演算子==過負荷が間違っていると思います。私がしたことは友人のostream&operator ==(ostream&os、Contact&c)のようなものを使用していました。 –

+0

'' operator == 'は、他の要素と等しい要素を見つけるために使われると思いますか?どのような種類のオブジェクトを比較すべきですか? – juanchopanza

答えて

0

std::findは、一度にベクトル全体を比較するのではなく、一度に1つの要素を比較します。

2つのContact Sを比較するための適切な署名が

friend bool operator==(const Contact& lhs, const Contact& rhs); 

であるか(一方の暗黙の部分が*thisある)メンバ関数

bool operator==(const Contact& rhs) const; 
関連する問題

 関連する問題