Template di stack

di il
8 risposte

Template di stack

Innanzitutto premetto che sono nuovo di questo forum e non molto rodato sulla programmazione in c++, il mio compito è di implementare un template di stack usando Eclipse.il codice formato da header file e 2 .cpp di cui uno di test è questo sotto.Sinceramente non riesco a capire dove è l'errore che commetto e vorrei capire cosa è...


#ifndef STACK_H_
#define STACK_H_
#include <iostream>
template< class T >
class STACK{
public:
STACK(int=10); //costruttore di default
~STACK(){delete[] stackPtr;} ;//distruttore per quanto riguarda delete[ ]Deallocates the memory block
//pointed by ptr (if not null), releasing the storage space previously allocated to it by a call to operator new[] and rendering that pointer location invalid.
bool push(const T&);//inserisce un elemento sulla pila
bool pop(T&);
private:
int size; //numero degli elementi della pila
int top; //indice dell'elemento incima alla pila
T *stackPtr; //puntatore alla pila
bool isEmpty() const {return top==1;}
bool isFull() const {return top==size-1;}
};

#endif /* STACK_H_ */


#include"STACK.h"
#include <iostream>
using namespace std;
#include "stdlib.h"
template< class T >

STACK<T>::STACK(int s)
{size=s>0?s:10;
top=-1;
stackPtr=new T[size];
}

template<class T>
bool STACK<T>::push(const T &pushValue)
{ if(!isFull()){
stackPtr[++top]=pushValue;
return true;
}
return false;

}

template<class T>

bool STACK<T>::pop(T &popValue){
if(!isEmpty()){
popValue=stackPtr[top--];
return true;
}
return false;
}


infine il file di test è
#include <iostream>
#include <iomanip>
using namespace std;
#include"STACK.h"

using namespace std;
int main()
{
STACK<double> doubleStack(5);
double f=1.1;
cout<<"Pushing elements onto doubleStack\n";
while(doubleStack.push(f)) {
cout<<f;
f +=1.1;
cout<<"\nStack is full.Cannot push "<<f
<<"\nPopping elements from doubletack\n";
}
return 0;
}

In particolare l'errore è" undefined reference to `STACK<double>::STACK(int)' "

..dove sbaglio?è palese il mio errore ?grazie

8 Risposte

  • Re: Template di stack

    Manca
    
    template<class T>
    prima di
    
    STACK<T>::STACK(int s)
    {
    	size=s>0?s:10;
    	top=-1;
    	stackPtr=new T[size];
    }
  • Re: Template di stack

    ...no è appena più su, prima della riga vuota,grazie comunque
    ma può darsi che al mio Eclipse manca qualche plug in per i template(non so, la butto lì)
  • Re: Template di stack

    Ah ... non si vedeva ... purtroppo il codice è un po' confuso ...

    Comunque, tu hai un file .h e un file .c/cpp per il test?
  • Re: Template di stack

    Dunque, ho un file.h di sola definizione dei membri public e private.
    poi ho 2 file .cpp
    nel primo definisco le funzioni di stack.h(dopo ovviamente aver definito #include<stack.h> e termino con la loro definizione.
    Il secondo file.cpp invece include stack.h ed è formato da una semplice funzione.
    Il fatto è che lo sto prendendo da Deitel&Deitel ma a me su eclipse ha deciso di non andare, perciò il dubbio sulla bontà del mio eclipse.
    Scusate comunque tutti per il disordine del programma postato.
    Grazie
  • Re: Template di stack

    Nel caso dei template non puoi usare due .cpp separati.

    L'implementazione deve essere dove c'è il main ... usa un solo .cpp
  • Re: Template di stack

    ....questa nozione mi mancava.Grazie mille finalmente(grazie di certo non a me) ho risolto questo il problema !
    Grazie mille per la pronta risposta! adesso va tutto bene, se chiedevo questa cosa al professore mi faceva saltare in aria!
  • Re: Template di stack

    Okay ... leggi anche questo

    http://www.codeproject.com/Articles/3515/How-To-Organize-Template-Source-Code

    anche se personalmente non condivido l'include di un .cpp.

    Consulta anche i due libri indicati alla fine (specialmente il primo).
  • Re: Template di stack

    Grazie di nuovo
Devi accedere o registrarti per scrivere nel forum
8 risposte