この '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...
}
};
私はここで何か間違ったことをやっている知っているが、私はこれを実装する権利オブジェクト内だと確信しています。どんな助けも素晴らしいだろう。
1として)[MCVE]してください。 2)左側のオペランドに 'Contact'をとる' operator == 'を実装しましたか(エラーメッセージが示唆しているように)? –
私はAddressBookの中で友人機能を使って問題を救済しようとしましたが、問題はさらに悪化しています。私は演算子==過負荷が間違っていると思います。私がしたことは友人のostream&operator ==(ostream&os、Contact&c)のようなものを使用していました。 –
'' operator == 'は、他の要素と等しい要素を見つけるために使われると思いますか?どのような種類のオブジェクトを比較すべきですか? – juanchopanza