2017-11-05 2 views
-2

Ich habe Probleme, die richtige operator== Überladungsfunktion zu bekommen, damit dieser "Find" -Algorithmus funktioniert. Was ich tue, ist ein Objekt 'Kontakt' in einen Parameter für ein anderes Objekt AddressBook mit seiner Elementfunktion übergeben, um ein Objekt innerhalb eines Vektors zu entfernen. Das heißt natürlich, wenn es in dem Container gefunden wird, den ich eingerichtet habe.C2678 binär '==': Kein Operator gefunden, der einen linken Operanden vom Typ 'Kontakt' verwendet (oder es gibt keine akzeptable Konvertierung)?

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; 
    } 
} 

Hier, wo die Definition mich für den Fehler hat, die gefunden wurde:

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); 
    } 

Denken Sie daran, dass ich diesen Fehler habe, bevor ich die folgenden operator== hinzugefügt. Danach wird es nur noch schlimmer:

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... 
    } 
}; 

Ich weiß, dass ich etwas tue hier falsch, aber ich bin sicher, dass ich in dem richtigen Objekt bin, dies umzusetzen. Jede Hilfe wäre großartig.

+0

1) Bitte geben (wobei ein impliziter Teil *this ist) [MCVE]. 2) Haben Sie 'operator ==' implementiert, der 'Contact' als linken Operanden verwendet (wie die Fehlermeldung suggeriert)? –

+0

Ich versuchte, eine Friend-Funktion in AddressBook zu verwenden, um zu sehen, ob das Problem behoben wird, aber das Problem wurde nur noch schlimmer. Ich denke, ich mache Operator == Überladung falsch. Was ich getan habe, war etwas wie: friend ostream & operator == (ostream & os, Contact & c). –

+0

Was 'operator ==' denken Sie, würde verwendet werden, um ein Element zu finden, das gleich einem anderen Element ist? Welche Arten von Objekten sollte es vergleichen? – juanchopanza

Antwort

0

std::find vergleicht nicht den gesamten Vektor auf einmal, sondern ein Element auf einmal.

Die richtige Signatur für zwei Contact s Vergleichens

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

oder als Elementfunktion

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