'<<' operator überladen



  • thepower schrieb:

    hab namespace std aus dem Programm genommen und jetzt funktionierts wenn ich auch noch nicht blicke warum,

    Der namespace std ist reserviert, d.h du darfst nichts neues dort einführen. Punkt. Einzige Ausnahme sind Spezialisierungen für Templates aus namespace std, z.B. std::swap.

    Der Linkerfehler kam aber vermutlich eher daher, dass du operator<< zwar innerhalb der Klasse zeit im namensraum std als friend deklariert hast, aber ihn nicht im namensraum std definiert hast (sondern im globalen namensraum). ggf. wäre da die freind-deklaration so anzupassen gewesen, dass du den voll qualifizierten Namen (also ::operator<<) angeben müsstest.

    Aber wie gesagt, Finger weg von namespace std.



  • pumuckl schrieb:

    Einzige Ausnahme sind Spezialisierungen für Templates aus namespace std

    Ist das so? Ich dachte bisher, man darf nicht mal das.



  • 314159265358979 schrieb:

    pumuckl schrieb:

    Einzige Ausnahme sind Spezialisierungen für Templates aus namespace std

    Ist das so? Ich dachte bisher, man darf nicht mal das.

    Ja. Siehe dazu N3242 -> 17.6.4.2


  • Mod

    314159265358979 schrieb:

    pumuckl schrieb:

    Einzige Ausnahme sind Spezialisierungen für Templates aus namespace std

    Ist das so? Ich dachte bisher, man darf nicht mal das.

    Das war schon immer so, sofern selbstdefinierte oder von diesen abgeleitete Typen im Spiel sind.


Anmelden zum Antworten