C2678二进制'==':找不到哪个运算符采用了'Contact'类型的左手操作数(或者没有可接受的转换)?

时间:2017-11-05 21:16:50

标签: c++ find operator-overloading

我无法获得正确的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...
    }
};

我知道我在这里做错了,但我确信我是正确的对象来实现这一点。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

std::find不会立即比较整个矢量,而是一次比较一个元素。

比较两个Contact s的正确签名是

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

或作为成员函数(其中一个隐式部分为*this

bool operator==(const Contact& rhs) const;