Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » templates

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.05.2004, 19:51 Uhr
~pekingente
Gast


Habe noch nicht die Erfahrung was Templates angeht, deshalb weiß ich auch nicht, wo der Fehler liegt.

Die Fehlermeldung bekomme ich in der main: 3 Fehler

1.Fehler
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Stack<int>::~Stack<int>(void)" (??1?$Stack@H@@QAE@XZ)

2.Fehler
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Stack<int>::~Stack<int>(void)" (??1?$Stack@H@@QAE@XZ)

3.Fehler
Debug/main.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise


Vielen Dank im Vorraus.

Headder-Datei:

C++:

#ifndef _STACK_H_
#define _STACK_H_

const unsigned int const_obergrenze = 10;

template<class T>
class Stack
{    
    private:
        T * ptr_feld;
        int top_stack;
        int obergrenze;

        ///<Attribute
        int count;
        void print(void) const;
        
    public:
        Stack();            ///<Standard-Konstruktor
        Stack(int size);        ///<Spez. Konstruktor
        Stack(const Stack& s);    ///<Kopier-Konstruktor
        ~Stack();        ///<Destruktor
        
        Stack& operator=(const Stack& s);
        
        void push(const T& elem);        
        T pop(void);                    
        T top(void) const;                
        int size(void) const;            
        bool isEmpty(void) const;
        bool isFull(void) const;
        void dumpForward(void) const;
        void dumpBackward(void) const;
};

#endif /*_STACK_H_*/



Cpp mit den Methoden


C++:

#include <iostream>
#include "stack.h"

using namespace std;

template <class T>
Stack<T>::Stack(void)
{    
    ptr_feld = new T [const_obergrenze];
    
    obergrenze = const_obergrenze;
    count = top_stack = 0;
}

template <class T>
Stack<T>::Stack(int size)
{
    ptr_feld = new T [size];
    
    obergrenze = size;
    count = top_stack = 0;
}

template <class T>
Stack<T>::Stack(const Stack<T> & original)
{    
    count = original.count;
    top_stack = original.top_stack;
    obergrenze = original.obergrenze;
    
    ptr_feld = new T [count];

    for (int i = 0;i<count;i++)
    {
        ptr_feld[i] = original.ptr_feld[i];  
    }
}

template <class T>
Stack<T>::~Stack<T>(void)
{
    if (count >= 0)
    {
        delete [] ptr_feld;
    }
}

template <class T>
void Stack<T>::push(const T& elem)
{    
    if (top_stack < (count - 1))
    {
        ptr_feld[count++] = elem;  
        top_stack = count;
    }
}

template <class T>
T Stack<T>::pop(void)
{
    int wert = 0;
    
    if (top_stack > 0)
    {
        wert = ptr_feld[count-1];
    }
    
    count--;
    top_stack--;

    return wert;
}

template<class T>
void Stack<T>::dumpBackward(void) const
{    
    int i;

    for (i= count-1;i>=0;i--)
    {
        cout << "Wert: " << ptr_feld[i]  << endl;
    }
}

template <class T>
void Stack<T>::dumpForward(void) const
{
    for (int i = 0;i<(count-1);i++)
    {
        cout << "Wert: " << ptr_feld[i]  << endl;
    }
}



Main

C++:
#include <iostream>
#include "stack.h"

using namespace std;

int main (void)
{    
    Stack<int> int_stack;    
    
    return 0;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.05.2004, 20:25 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


template definiert und deklariert man im header... hat nix in ner cpp-datei zu suchen

desweiteren würd ich keine globale variable obergrenze anlegen sondern die stackgrösse im konstruktor mit übergeben...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.05.2004, 20:34 Uhr
~pekingente
Gast


Ja, funktionier. Vielen dank.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.05.2004, 20:40 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hab ich ganz vergessen lobend zu erwähnen...
war eine mustergültige problembeschreibung...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.05.2004, 21:08 Uhr
0xdeadbeef
Gott
(Operator)


Warum benutzt du nicht den STL-Stack? Ist einfacher zu schreiben, einfach:

C++:
#include <stack>



--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: