vector und Elementsuche
-
Hast du es mal mit integralen Typen probiert?
Falls egal eine Klasse ist, muss diese eine Methode mit der Signaturbool egal::operator== (const egal&)besitzen, oder es muss eine Funktion der Signatur
bool operator== (const egal&, const egal&)existieren.
Übrigens, "Binärer Operator" heißt nicht, dass ein Vergleich auf Ebene der Binärdarstellung durchgeführt wird, sondern dass dieser Operator zwei Operanden entgegennimmt.
-
egal ist eine Struktur.
Muss ich das dafür auch machen?
-
Strukturen sind in C++ Klassen (falls sie nicht nur POD-Elemente enthalten), also gilt für sie dasselbe.
-
OK, Danke!
Mein Problem ist nur dass die Struktur in einem C-header definiert ist.
Wie/wo muss ich da den Operator beschreiben?
-
Beispiel:
xyz.h
typdef struct { float x; float y; #ifdef __cplusplus bool operator== (const piVERTEX &a, const piVERTEX &b) { if( (a->x == b->x) && (a->y == b->y) ) return true; } #endif }Dann meckert der Compiler (2*): error C2143: Syntaxfehler: Es fehlt ',' vor '&'
-
Nimm lieber die Variante des globalen ==-Operators, der sollte auch mit C-Structs funktionieren. Du brauchst dafür nichtmal den Header zu ändern (was du auch nicht tuen solltest). Die Typen existieren bei der Deklaration der Funktion noch nicht, daher wird der Code nicht kompiliert (das nächste mal bitte den vollständigen Fehlertext).
-
Hmm...
Wenn ich im Header zur cpp Datei, wo ich suchen möchte, einfüge:
#ifdef __cplusplus
bool operator== (const blah &a, const blah &b)
{
if( (a.x == b.x) && (a.y == b.y) ) return true;
}#endif
kommt der Compilerfehler (2*): error C2733: Zweite C-Bindung für überladene Funktion 'operator`=='' nicht zulässig
-
Hilfe!

-
Ah...
Wenn ich die Funktion in die .cpp schreibe funktioniert es.
Warum nicht im header?
-
Hünchen schrieb:
Hmm...
Wenn ich im Header zur cpp Datei, wo ich suchen möchte, einfüge:
#ifdef __cplusplus
bool operator== (const blah &a, const blah &b)
{
if( (a.x == b.x) && (a.y == b.y) ) return true;
}#endif
kommt der Compilerfehler (2*): error C2733: Zweite C-Bindung für überladene Funktion 'operator`=='' nicht zulässig
die definition steht nicht zufällig in einem extern "C" block? im übrigen ist der operator selbst fehlerhaft ohne else bzw. fall-through case. besser ist nat. auf das if ganz zu verzichten und die bedingung innerhalb if direkt als return argument zu benutzen
da der operator in einem header definiert wird, sollte er auch inline sein. es sei noch darauf verwiesen, dass ein op== nicht zwingend benötigt wird: das kann auch eine ganz normale funktion (oder funktor) sein wenn statt find find_if verwendet wird.
-
Lag tatsächlich am extern "C" block.
Vielen Dank für die viele Hilfe!