Klassen in template Klassen wandeln
-
Folgende Klassen sollen in template Klassen gewandelt werden, so dass die Elemente nicht mehr vom Typ int sondern vom Typ T sind:
class Stack;
class Stack_el {
private:
int eintrag;
Stack_el* next; //Zeiger auf naechstes Element im Stackpublic:
Stack_el() { eintrag=0; next=NULL; }
Stack_el(int n) { eintrag=n; next=NULL; }friend class Stack;
};class Stack {
private:
Stack_el* data; //Zeiger auf oberstes Elementpublic:
Stack() { data=NULL; }
void push(int);
int pop();
};Ist das dann so richtig?
class Stack;
template<class T>
class Stack_el {
private:
T eintrag;
Stack_el* next; //Zeiger auf naechstes Element im Stackpublic:
Stack_el() { eintrag=0; next=NULL; }
Stack_el(T n) { eintrag=n; next=NULL; }friend class Stack;
};template<class T>
class Stack {
private:
Stack_el* data; //Zeiger auf oberstes Elementpublic:
Stack() { data=NULL; }
void push(T);
int pop();
};Bekomm nämlich die Fehlermeldung error: âStackâ is not a template type
caro
-
Deine forward declaration war ohne Angabe, dass es sich bei Stack um eine Template-Klasse handelt. Außerdem musst du immer die template parameter angeben, wenn du die Klassen benutzt:
template <class T> class Stack; template<class T> class Stack_el { private: T eintrag; Stack_el* next; //Zeiger auf naechstes Element im Stack public: Stack_el() { eintrag=0; next=NULL; } Stack_el(T n) { eintrag=n; next=NULL; } friend class Stack<T>; }; template<class T> class Stack { private: Stack_el<T>* data; //Zeiger auf oberstes Element public: Stack() { data=NULL; } void push(T); int pop(); };
-
Im übrigen ist die Vorab-Deklaration von Stack absolut unnötig.
Wenn es wegen dem friend ist, dafür braucht der Typ nicht bekannt zu sein!
-
Vielen Dank für die Mühe, so klappts!!!