operator"ShiftLeft"



  • Hi,

    das Thema sollte eigentlich operator<< heissen, aber da meckert das forum, dass er den Beitrag dann nicht speichern kann.
    Ich habe den Operator << in myComplex-Klasse so implemetiert:

    ostream &myComplex::operator<<(ostream &o)
     {
            o << "(" << real << ", " << im << ")";
            return o;
     }
    

    Der Compiler meckert da auch nicht.
    Aber sobald ich in main() folgendes mache:

    myComplex c(3, 4);
    cout << c;

    kommt diese Fehlermeldung:
    [C++ Fehler] Project2.cpp(8): E2094 'operator<<' ist im Typ 'ostream' für Argumente des Typs 'myComplex' nicht implementiert..

    Was habe ich denn falsch gemacht ?

    mit friend und so habe ich auch schon probiert - da meckert der Linker dann.
    Compiler: BC++Builder 4
    Bei BC++4.05 Compiler ging es nämlich so.



  • in klasse myComplex:
    friend ostream &operator<<(ostream &o,myComplex &mc)
    {
            return o << "(" << mc.real << ", " << mc.im << ")";
    }
    

    Bei BC++4.05 Compiler ging es nämlich so.

    ja, damals haste aber auch

    myComplex c(3, 4);
    c << cout;
    

    benutzt.



  • OK. Thx.
    wenn ich den Code direkt so in der myComplex.h implementiere geht es.

    wenn ich aber def. und impl. trenne, also in der myComplex.h

    friend ostream &operator<<(ostream &o, myComplex &c);
    

    schreibe und in der myComplex.cpp

    ostream &operator<<(ostream &o, myComplex &c)
     {
            o << "(" << c.real << ", " << c.im << ")";
            return o;
     }
    

    schreibe bekomme ich einen Linker-Error (auch wenn ich in der impl. noch friend davor schreibe.

    [Linker Fehler] Unresolved external 'operator <<(std::basic_ostream<char, std::char_traits<char> >&, myComplex&)' referenced from D:\C++\KOMPLEXE ZAHLEN\PROJECT2.OBJ.

    Wieso ?



  • Original erstellt von fit:
    Wieso ?

    die alte kristallkugel sagt, du hättest myComplex.cpp nicht ins projekt eingebunden. aber deswegen schmeiß ich sie auch weg. die neue behauptet, due hättest in der myComplex.h die <iostream> und in der myComplex.cpp die <iostream.h> inkludiert.



  • Thx. Vielleicht hatte die alte kristallkugel doch recht.
    Mit dem BC++Builder 4 komme ich einfach nicht zurecht, wenn ich mit ihm eine Konsolenanwendung erzeuge.

    Wenn ich alles in der .h implementiere läuft alles, aber sobald ich die Implementierung auf die .cpp auslagere (egal was) meckert der Linker.
    Sowas habe ich noch nie erlebt.

    Er findet also anscheinend die .cpp-Datei nicht oder ignoriert sie.
    Kennst Du zufälligerweise den BC++B und weisst, wie ich dem verklicker, dass er auch mal in die entsprechende .cpp reinzuschauen hat ?

    (Das #include "myComplex.h" in der myComplex.cpp habe ich nicht vergessen)

    Wenn das so weitergeht, dann installiere ich mir wieder meinen uralten Compiler. 😞



  • mach mal in die myComplex.cpp dies hier rein:

    void bla()
    {
    houston, wir haben ien problem
    }
    

    und sag mir, obs nen fehler gab. wenn nein, dann compiliert er die eht nicht. dann such das fenster, wo aufgelistet ist, welche dateien zu deinem projekt gehörten und probier man die Einfg-Taste.
    (hab keinen BCB. ka, wie man das da macht, aber ich würd's mit Einfg probieren.)



  • Jo, hat er kompiliert.
    unter Ansicht ->Projektverwaltung habe ich die myComplex.cpp hinzugefügt.
    Aber dann schreibt er in mein Hauptprogramm
    USEUNIT("myComplex.cpp");
    und der Compiler spuckt gleichzeitig ne Warnung aus, das dieser Stil veraltet ist...das kommt mir nicht geheuer vor.

    Vielen Dank erstmal für Deine Hilfe...ich lass mir was einfallen.


Anmelden zum Antworten