friends und Templates
-
Hallo zusammen,
ich habe ein Listentemplate geschrieben und eine Iteratortemplateklasse als friend definiert. Jedoch motzt mein Compiler (.NET 2003) das die Datentypen im Iterator nicht bekannt sind?!?
Hier mein Code:
#ifndef LIST_TMP1_H #define LIST_TMP1_H // Übung 6.2 - Templateklassen // Datei: list_tmp.h // Allgemeine Listenklasse template<class T> class Iterator; template<class T> class List { struct ListElem { // Listenelement ListElem *succ; // Nachfolgezeiger T *info; // Zeiger auf Objekt mit Nutzdaten } *head; // Listenanker public: List(void); ~List(void); T *find(T *el); // suchen void insert(T *el); // vorne einketten T *remove(T *el); // ausketten friend class Iterator<T>; }; // Iteratorklasse für allgemeine Liste template<class T> class Iterator { List<T> &list; List<T>::ListElem *curr; public: Iterator(List<T> &l); T *next(void); void reset(void); }; #endif // LIST_TMP1_H
und die Fehlermeldung:
d:\-=FH=-\Sem IV\DV3\kap_6_new\list_tmp1.h(34): error C2501: 'Iterator<T>::curr' : missing storage-class or type specifiers
d:\-=FH=-\Sem IV\DV3\kap_6_new\list_tmp1.h(34): error C2143: syntax error : missing ';' before '*'
d:\-=FH=-\Sem IV\DV3\kap_6_new\list_tmp1.h(34): warning C4346: 'List<T>::ListElem' : dependent name is not a typeVielleicht hat ja von euch jemand eine Ahnung wieso hier ein Fehler vorliegt.
Danke && Gruß
Jochen
-
template<class U> friend class Iterator;
//nicht sicher ist:
typename List<T>::ListElem* curr//muss hier ein typename hin?
-
Perfekt!!!
Mit dem Schüsselworttypename
ist das Problem gelöst.
Manche Leute haben echt Ahnung!
Gruß && Danke
Jochen
-
Schau mal hier http://www.c-plusplus.net/forum/viewtopic.php?t=91586. Da erklärt Hume warum das so ist.
-
Mit .Net 2002 lässt sich das Programm ohne Fehler erstellen?!? Wurde dieses Schüsselwort erst mit .Net 2003 eingeführt?
Gruß && Danke
Jochen
-
Nein. "typename" gibt es schon wesentlich länger als das .NET Studio 2002.
-
DonKing schrieb:
Mit .Net 2002 lässt sich das Programm ohne Fehler erstellen?!? Wurde dieses Schüsselwort erst mit .Net 2003 eingeführt?
typename hat mit .NET nix zu tun, das ist ein C++ Schlüsselwort.