2016-06-02 15 views
0

Ich erhalte ein Undefined Symbole für Architektur Fehler beim Kompilieren.C++ Vektor Find() Überladener Operator - Fehler

Verwenden Sie einen Vektor, Find() - Algorithmus und nicht überladene Operatorfunktion.

Einige Hinweise für den Fehler wären willkommen.

#include <stdio.h> 
    #include <iostream> 
    #include <stdexcept> 
    #include <vector> 
    #include <algorithm> 
    #include <string> 

    using namespace std; 

    struct person 
    { 
    char firstInitial; 
    string firstName; 

    person(const char fi, const string fn) 
    { 
     firstInitial = fi; 
     firstName = fn; 
    }; 

    char getInitial() 
    { 
     return firstInitial; 
    }; 

    string getName() 
    { 
     return firstName; 
    }; 

    bool operator==(const person& r); 

    }; 

    bool operator==(const person& r, const person& x) 
    { 
    return x.firstInitial == r.firstInitial; 
    } 



    int main (int argc, char *argv[]) 
    { 
    vector<person> myvector; 
    vector<person>::iterator itr; 

    myvector.push_back(person('j', "john")); 
    myvector.push_back(person('s', "steve")); 
    myvector.push_back(person('c', "candice")); 

    itr = find (myvector.begin(), myvector.end(), person('s', "")); 

    if (itr != myvector.end()) 
     cout << "First Name: " << itr->getName() << '\n'; 
    else 
     cout << "NOT Found" << '\n'; 
    } 

Antwort

0

Sie müssen den Komparator außerhalb Ihrer Klasse definieren, nicht als Mitglied Funktion

Und das sollte funktionieren, Ihr Programm zurückgegeben "Steve" für mich.

1

Die Deklaration und Definition von operator== stimmen nicht überein. Wenn Sie es zu einer Nicht-Member-Funktion machen möchten, entfernen Sie einfach die Deklaration innerhalb der Klassendefinition, es wird dadurch zu einer Member-Funktion.

bool operator==(const person& r); 

Wenn Sie eine Memberfunktion machen möchten, sollten Sie es außerhalb der Klassendefinition als definieren:

bool person::operator==(const person& r) 
{ 
    ... 
}