Wie behebe ich "zweideutig überlastung" Fehler beim überladen von operator<< (Vorlagen)?
Ich versuche, die überlastung der << Betreiber, aber ich bekomme die folgende Fehlermeldung:
Fehler: mehrdeutig overload for 'operator<<' in 'std::cout << "Test "'
..Gefolgt von 5 Milliarden anderen Fehler ähnlich:
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/ostream:165:7: Hinweis:
Kandidaten sind: ...
Dieser kommt, denn ich bin mit cout in meinem main.cpp Datei.
Hier ist mein code:
In BinTree=.h:
template <typename T>
class BinTree{
...
friend std::ostream& operator<< <>(std::ostream&, const T&);
In BinTree.cpp:
template <typename T>
std::ostream& operator<< (std:: ostream& o, const T& value){
return o << value;
}
Vielen Dank im Voraus für jede Hilfe, die Sie geben können.
Ich bin nicht völlig überzeugt, Sie haben uns genug code, um dieses problem zu lösen, aber die Informationen, die Sie gegeben, der uns führt mich zu der Frage: Warum
operator<<(std::ostream&, const T&)
müssen Zugang zu BinTree<T>
's-Interna wenn es nicht immer verwenden (oder BinTree<T>
)?InformationsquelleAutor Joey | 2011-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Funktion hat die gleiche Signatur als die, die bereits definiert. Dies ist der Grund, warum der compiler meckert über ambigous überlastung. Ihre Funktion versucht, eine Funktion definieren, die streamen alles auf ein ostream. Diese Funktion existiert bereits in dem Standard-Bibliothek.
Was Sie vielleicht tun möchten, schreiben Sie eine Funktion, die definiert, wie ein BinTree = gestreamt wird (alles). Bitte beachten Sie, dass der stream-Typ ist Vorlagen. Also, wenn Sie die Kette der Aufrufe an die stream-Betreiber es strömt den konkreten Typ.
InformationsquelleAutor David Feurle
Meinst du..
InformationsquelleAutor BLUEPIXY
Poste mehr code, bis dann siehe diesen Artikel:
Ist dies aber nichts zu tun, nennt sich selbst. Es ist der rekursive Aufruf. Die
operator<<
definiert ist, um die Ausgabe Wert von TypT
, und wenn Sie schreibeno<<value
nennt man sich selbst, als die Art dervalue
istT
.Zweiten, da diese Funktion-Vorlage, sollte die definition in der
.h
- Datei, nicht in.cpp
- Datei, wenn Sie erwarten, dass Ihr code funktioniert, indem einschließlich.h
Datei.InformationsquelleAutor Nawaz