Templates mit Nested Classes - Compiler Error
-
Hallo,
folgende Klassen-Beziehung:
header:
template <class S> class Class6 { class Subclass { // copy assignment operator Subclass& operator= (const Subclass& rhs); } }body:
template<class S> Class6<S>::Subclass& Class6<S>::Subclass::operator= (const Subclass& rhs) { return *this; }ergibt folgenden Fehler:
../Class6.cpp:104: error: expected constructor, destructor, or type conversion before '&' token ../Class6.cpp:104: error: expected `;' before '&' tokenIch benutze gcc 3.4.4 und habe das gleiche auch schon mit einem ms-compiler getestet. Scheinbar hat der Compiler ein Problem mit der Typaulösung des Class6<S>::Subclass&
Auch eintypedef Class6<S>::Subclass&innerhalb der Subclass Deklaration will nicht gelingen.
Hat da jemand eine Ahnung woran es hapert oder welchen workaound man benutzen kann?
Danke
-
Klappt es denn, wenn du bei der Definition des Operators den kompletten Typ angibst?
template<class S> Class6<S>::Subclass& Class6<S>::Subclass::operator= (const Class6<S>::Subclass& rhs) { return *this; }(und ein typedef kann man afaik nicht mit template-Parametern ausstatten)
-
eem schrieb:
ergibt folgenden Fehler:
../Class6.cpp:104: error: expected constructor, destructor, or type conversion before '&' token ../Class6.cpp:104: error: expected `;' before '&' token*.cpp finde etwas seltsam
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html
-
miller_m schrieb:
eem schrieb:
ergibt folgenden Fehler:
../Class6.cpp:104: error: expected constructor, destructor, or type conversion before '&' token ../Class6.cpp:104: error: expected `;' before '&' token*.cpp finde etwas seltsam
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.htmldas wär dann aber ein linker fehler

versuchs einfach mal so:
template <class S> class Class6 { class Subclass { // copy assignment operator Subclass& operator= (const Subclass& rhs); };// fehlendes; };//ebenso template<class S> typename Class6<S>::Subclass&//typename Class6<S>::Subclass::operator= (const Subclass& rhs) { return *this; }
-
otze schrieb:
das wär dann aber ein linker fehler

stimmt auffällig :xmas1:
-
Hallo,
Danke erstmal für eure Anteilnahme

template<class S> Class6<S>::Subclass& ::Package1::Class6<S>::Subclass::operator= (const ::Package1::Class6<S>::Subclass& rhs){ return *this; };die Schreibweise bringt nichts, weder im .cpp file, noch im header und führt zur gleichen Fehlermeldung.
-
//edit ich geb dem post mal doch nen sinn^^
siehe meinen letzten post, da hab ich geedited
-
[quote="otze]
versuchs einfach mal so:template <class S> class Class6 { class Subclass { // copy assignment operator Subclass& operator= (const Subclass& rhs); };// fehlendes; };//ebenso template<class S> typename Class6<S>::Subclass&//typename Class6<S>::Subclass::operator= (const Subclass& rhs) { return *this; }[/quote]
Herrvorragend. So macht der compiler alles wunderbar. Danke euch, ich werd mein neues Wissen gleich verbreiten

Frohes Fest und so, gell?
-
//edit geht als Gast nicht.
Aber seltsam ist es dennoch, dass dieses Problem nur beim coppy-ass-c'tor auftritt. default c'tor, default d'tor und copy-c'tor brauchen dieses typename nicht.
Aber okay...
-
eem schrieb:
default c'tor, default d'tor und copy-c'tor brauchen dieses typename nicht.
Weil die Construktoren und der Destruktor keinen Rückgabetyp haben, den du mit einem expliziten "typename" kennzeichnen mußt. Wenn eine andere Funktion einen "Class6<S>::Subclass" zurückgeben will, brauchst du es wieder

-
verstehe, danke.