2017-11-05 10 views
-2

이 '찾기'알고리즘을 작동 시키려면 오른쪽 operator== 오버로드 기능을 사용하는 데 문제가 있습니다. 내가 뭘하는지 다른 객체 AddressBook에 대한 매개 변수에 'Contact'객체를 전달하여 멤버 함수를 사용하여 벡터 내에서 발견 된 객체를 제거합니다. 그것은 물론 컨테이너 내에 발견되는 경우입니다. 정의가 발견 된 오류 나를 어디로 데려 갔는지C2678 binary '==': '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)'Operator =='를 구현 했습니까 (오류 메시지에서 알 수 있듯이) 왼쪽 문의 피연산자로 'Contact'를 사용합니까? –

+0

주소록 내에서 친구 기능을 사용하여 문제를 해결했는지 확인하려고했지만 문제가 더 심각해졌습니다. 나는 operator == overload wrong를하고 있다고 생각한다. 내가 한 일은 친구 ostream & operator == (ostream & os, Contact & c)와 같은 것을 사용했습니다. –

+0

'operator =='다른 요소와 같은 요소를 찾는 데 사용되는 것은 무엇이라고 생각하십니까? 어떤 유형의 객체를 비교해야합니까? – juanchopanza

답변

0

std::find은 한 번에 전체 벡터를 비교하지 않고 한 번에 하나의 요소를 비교합니다.

Contact의 비교를위한 적절한 서명

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

또는 (하나 개 암시 부분 *this이다) 멤버 함수

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