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 Stack

    public:
    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 Element

    public:
    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 Stack

    public:
    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 Element

    public:
    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!!!


Anmelden zum Antworten