Die Fehlermeldung ist ziemlich klar: Der Compiler sucht nach einer Operator == Funktion, die zwei Fahrzeuge vergleicht. Die Unterzeichnung eines solchen Verfahrens, waren es zu existieren, so etwas wie
bool operator==(const Vehicle& first, const Vehicle& second);
Was ist nicht so klar sein würde, ist warum dies geschieht. Schließlich verwenden Sie keinen == Operator irgendwo in Ihrem Code! Crummy Compiler - beschweren sich über etwas, was Sie nicht einmal getan haben.
Um zu verstehen, was passiert, müssen Sie die "Finde" -Methode verstehen. Dies ist eine Template-Methode, und in C++ - Vorlagen sind ziemlich fancy-Text suchen und ersetzen (Warnung: massive Vereinfachung!). Der Code für "find" wird für die Typen, die Sie verwenden, direkt vor dem Ausführen des Compilers generiert.
Sie können überprüfen, wie finden Sie implementiert here. Im unwahrscheinlichen Fall, dass jemals geht offline cplusplus.com habe ich den entsprechenden Abschnitt unter * enthalten:
template<class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val)
{
while (first!=last) {
if (*first==val) return first; //<--- Notice the == operator
++first;
}
return last;
}
Das ist, wo die == herkommt! Der Compiler generiert automatisch den Suchcode für den von Ihnen angegebenen Typ (Fahrzeug). Dann, wenn es kompiliert wird, versucht der generierte Code einen Operator == zu verwenden, aber es gibt keinen für das Fahrzeug. Sie müssen einen mit Ihrer Fahrzeugklasse angeben.
* Ernsthaft aber - check out that website. Es zeigt dir, wie all das funktioniert.
Um 'find' zu verwenden, müssen Sie eine' operator == 'Funktion definieren, die' Fahrzeuge' miteinander vergleicht. Dies könnte entweder eine freie Funktion oder eine Elementfunktion sein. [Siehe hier] (http://stackoverflow.com/a/4421719/1505939) zum Beispiel –
Also, Sie brauchen ein 'operator ==' für Ihren Fahrzeugtyp (vorzugsweise nimmt das eine const) –
Sie besser bieten mehr Code wenn Sie wollen eine Antwort –