Überladener operator<< wird nicht aufgerufen
-
Ich weiß nicht, ob ich einfach irgendwas übersehen habe, aber aus irgendeinem Grund findet der Compiler die Überladung des op<< nicht.
Es geht dabei um folgende Codeabschnitte:binarytree.h: template<class T> class Node { public: [...] T data; [...] friend std::ostream& operator<<(std::ostream&, const Node<U>&); [...] }; template <class U> std::ostream& operator<<(std::ostream& os, const Node<U>& r) { os << r.data; return os; } main.cpp: int main() { Node<int>* head = new Node<int>; head->setData(5); cout << head; //ein vordefiniert op<< wird aufgerufen //-> gibt die Addresse von dem Objekt aus operator<<(cout, head); //erzeugt Compilerfehler, dass der Aufruf nicht eindeutig ist //Kandidaten sind aber nur für Basistypen (int, char) cout << head->data; //funktioniert delete head; return 0; }Kann mir da wer weiterhelfen?
Edit: Na toll, ich denke da ewig drüber nach und dann fällt mir die Anwort ein, wenn ich den Beitrag grad absende :o
Ich übergebe dem op<< einen Pointer und das kann natürlich nicht implizit in eine Referenz umgewandelt werden. *Kopf gegen Tischkante hau*
-
cout << *head;"head" ist keine Node, sondern nur ein Zeiger auf eine Node.
-
Danke für die schnelle Antwort, da war ich sogar mit meinem Edit langsamer :>
-
Du hast einen op<< für Referenzen, aber nicht für Zeiger auf 'Node', also mußt du darüber auch Referenzen (bzw. Objekte) ausgeben:
Node<int>* head = new Node<int>; head->setData(5); cout << *head;//Dereferenzieren -> Zugriff auf das Objekt "hinter" deinem ZeigerEdit: zu langsam
was ist nur mit mir los?