operator<< für template Klasse überladen
-
Hallo ,
ich habe eine template Klasse Kreis , leider krieg ich bei meinem operator immer eine Fehlermeldung. Ist die Syntax falsch?
template<class T,class S>class Kreis { // template fuer mehrere Datentypen
private:
T m_x; //x-Koordinate Mittelpunkt
T m_y; //y-Koordinate Mittelpunkt
S rad; //Radius...
};Kreis<class T,class S> ostream& operator<<(ostream& os, const Kreis<class T,class S>& k) {
os << "Mittelpunkt: (" << k.m_x << "," << k.m_y << "), Radius: " << k.rad;
return os;
}Vielen Dank für Eure Hilfe,
Carolin[cpp]
-
Und welche Fehlermeldung kriegst du?
-
error: expected initializer before â&â token
-
Deine Syntax ist ziemlich durcheinander. So geht das:
template<class T,class S>class Kreis { // template fuer mehrere Datentypen private: T m_x; //x-Koordinate Mittelpunkt T m_y; //y-Koordinate Mittelpunkt S rad; //Radius friend ostream& operator<< <T,S>(ostream& os, const Kreis<T,S>& k); }; template<class T,class S> ostream& operator<<(ostream& os, const Kreis<T,S>& k) { os << "Mittelpunkt: (" << k.m_x << "," << k.m_y << "), Radius: " << k.rad; return os; }Guck dir genau an, wie ich das im Gegensatz zu dir gemacht habe. Wenn du das verstehst, hast du viel über Templates gelernt. Zur Not frag nach, wenn es unklar ist.
-
Der Operator soll weder friend noch Elementfunktion sein ... wie würde das denn aussehen?
-
fischldi schrieb:
Der Operator soll weder friend noch Elementfunktion sein ... wie würde das denn aussehen?
Er muss aber friend sein, wenn du versuchst wie in deinem Code auf private Member direkt zuzugreifen!
-
fischldi schrieb:
Der Operator soll weder friend noch Elementfunktion sein ... wie würde das denn aussehen?
Mit öffentlichen get-Funktionen.
-
template<class T,class S> class Kreis { public: std::ostream & print(std::ostream& os) { os << "Mittelpunkt: (" << k.m_x << "," << k.m_y << "), Radius: " << k.rad; return os; } private: T m_x; //x-Koordinate Mittelpunkt T m_y; //y-Koordinate Mittelpunkt S rad; //Radius }; template<class T,class S> std::ostream & operator << (std::ostream& os, const Kreis<T,S>& k) { return k.print(os); }