我无法获得正确的operator==
重载功能,无法使此“查找”算法正常工作。我正在做的是将对象'Contact'传递给另一个对象AddressBook
的参数,使用其成员函数删除向量中找到的对象。当然,如果在我设置的容器中找到它。
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 :(得分:0)
std::find
不会立即比较整个矢量,而是一次比较一个元素。
比较两个Contact
s的正确签名是
friend bool operator==(const Contact& lhs, const Contact& rhs);
或作为成员函数(其中一个隐式部分为*this
)
bool operator==(const Contact& rhs) const;