Operator Problem. Operator mehrmals includen.



  • Tagchen !

    Zum Speichern mehrerer Strukturen vom Typ meineStruktur, die unterschiedliche Datentypen beinhaltet, benutze ich die Klasse list der STL.

    Nach mehrtägigem Forschen und Rumprobieren ist es mir gelungen, einen globalen
    operator< fürs Sortieren zu basteln.

    Diesen operator< habe ich in einer, nennen wir sie mal aufgrund irrwitzigen
    Zeitaufwandes, fukkin_operator.h - Datei deklariert und gleichzeitig definiert:

    // fukkin_operator.h
    #ifndef _FUKKIN_OPERATOR_H
    #define _FUKKIN_OPERATOR_H
    BOOL operator < (const meineStruktur& a ,const meineStruktur& b)
    {
       Pseudo-Code:
    
           vergleiche alle Datentypen von  a und b und liefere entsprechend TRUE    
           oder FALSE;
    }
    #endif // _FUKKIN_OPERATOR_H
    

    Wenn ich nun diese fukkin_operator.h - Datei mit #include in eine
    Klasse_1.cpp - Datei einbinde,

    // Klasse_1.cpp
      ...
      #include "fukkin_operator.h"
      ...
      Klasse__1::IrgendeineFunktion()
      {
       list <meineStruktur> Liste;
       ...
       Liste.sort();
      }
      ...
    

    funktioniert das Sortieren der Liste tadellos 🙂
    ( freu, jubel, jauchz, mirselbstaufdieschulterklopf )

    Und jetzt kommt der Karton:

    - Karton Einleitung:

    Ich tu die fukkin_operator.h - Datei auch in Klasse_2.cpp includieren tun.
    Klasse_1.cpp und Klasse_2.cpp sind Bestandteile eines Projekts und mehr oder
    weniger voneinander abhängig.
    Klasse_1.cpp und Klasse_2.cpp hat also #include fukkin_operator.h

    - Karton Definition/Erklärung:

    Klasse_2.obj:error: "int __cdecl operator<(struct meineStruktur const
    &,struct meineStruktur const &)" (??M@YAHABUmeineStruktur@@0@Z) bereits in
    Klasse_1.obj definiert.

    - Karton Resultat: :-(((

    Wenn der Compiler also schon merkt, das der Operator bereits definiert ist, wieso gibt er sich denn nicht mit meinem schönen Operator zufrieden, wieso meckert die Tröte dann überhaupt rum ?

    Hab versucht den Operator extern zu deklarieren, funzt auch nicht. *grummel*
    Schaue heute abend wieder rein,
    MfG
    pro ggingmania



  • Hallo,
    du hast zwei Möglichkeiten:
    a) du deklarierst den Operator inline:

    // FREAKIN_operator.h
    #ifndef _FREAKIN_OPERATOR_H
    #define _FREAKIN_OPERATOR_H
    inline BOOL operator < (const meineStruktur& a ,const meineStruktur& b)
    {
       Pseudo-Code:
    
           vergleiche alle Datentypen von  a und b und liefere entsprechend TRUE
           oder FALSE;
    }
    #endif // _FREAKIN_OPERATOR_H
    

    b) du definierst den Operator in genau einer Übersetzungseinheit:

    // FREAKIN_operator.h
    #ifndef _FREAKIN_OPERATOR_H
    #define _FREAKIN_OPERATOR_H
    
    // Deklaration im Header
    BOOL operator < (const meineStruktur& a ,const meineStruktur& b);
    
    #endif // _FREAKIN_OPERATOR_H
    
    // FREAKIN_operator.cpp
    #include "FREAKIN_operator.h"
    // Definition in einer cpp-Datei
    BOOL operator < (const meineStruktur& a ,const meineStruktur& b) {
    
        ...
    }
    

    Weitere Informationen findest du hier:
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=ODR#Answ



  • Vielen Dank für die schnelle Antwort.

    Die zweite Möglichkeit gefällt mir am besten, dabei gibt es leider folgende
    Fehlermeldungen:

    MIST_operator.h(7) : error C2143: Syntaxfehler : Fehlendes ',' vor '&'
    MIST_operator.h(7) : error C2059: Syntaxfehler : '&'
    MIST_operator.h(7) : error C2803: Operator '<' muss mindestens einen formalen Parameter vom Typ Klasse haben
    MIST_operator.h(7) : error C2805: Binaerer Operator '<' hat zu wenig Parameter



  • Deine erste Möglichkeit ( inline ) funktioniert super !

    Noch einmal besten Dank !!!!

    LG,
    proggingmania



  • // SUPER_KLASSE_operator.h
    #ifndef _SUPER_KLASSE_OPERATOR_H
    #define _SUPER_KLASSE_OPERATOR_H
    inline BOOL operator < (const meineStruktur& a ,const meineStruktur& b)
    {
       Pseudo-Code:
    
           vergleiche alle Datentypen von  a und b und liefere entsprechend TRUE
           oder FALSE;
    }
    #endif // _SUPER_KLASSE_OPERATOR_H
    

    jippieeeeeeeeeeeeeeeeeeeeeee dankääääääääääääää


Anmelden zum Antworten