PDA

View Full Version : [c++] template. dove sbaglio?


ndakota
17-01-2008, 11:14
dovevo fare una classe stack e funzionava, successivamente dovevo renderla template, non ho fatto altro che aggiungere la "sintassi" per i template ma mi da 4 errori del tipo "simbolo esterno qualcosa non risolto".. dove sbaglio?

stack.h


#pragma once
#define DIM 25

template <typename T> class stack
{
public:
stack();
~stack();
void push(T data);
T pop();
private:
T pila[DIM];
int stackPointer;
};



stack.cpp


#include "stack.h"

template <typename T>
stack<T>::stack()
{
stackPointer = 0;
}

template <typename T>
stack<T>::~stack()
{

}

template <typename T>
void stack<T>::push(T data)
{
if(stackPointer > DIM - 1)
throw "stack pieno.";

else
pila[stackPointer++] = data;
}

template <typename T>
T stack<T>::pop()
{
if(stackPointer == 0)
throw "stack vuoto.";

else
return pila[--stackPointer];
}


main.cpp


#include "stack.h"
#include <iostream>
using namespace std;

int main()
{
stack<char> s;

s.push('c');
s.push('i');
s.push('a');
s.push('o');

cout << s.pop() << endl;
cout << s.pop() << endl;
cout << s.pop() << endl;
cout << s.pop() << endl;

cin.get();
return 0;
}


inoltre visto che sento dire da molti che tanti programmano procedurale anche se usano gli oggetti vorrei sapere se sono tra questi :p

kk3z
17-01-2008, 11:29
qui funziona perfettamente... mingw 3.4.5...

PS: forse ti conviene cambiare nome alla classe
PS2: forse è il caso di postare gli errori

fek
17-01-2008, 11:37
Devi implementare i metodi della classe template nel file hpp perche' il compilatore ha bisogno di tutta la definizione della classe al momento dell'instanziazione del template.

Non puoi usare i cpp. O meglio, nello standard non puoi, alcuni compilatori provano a fare i furbini.

Meglio ancora, usi la classe std::stack di STL.

ndakota
17-01-2008, 11:48
Devi implementare i metodi della classe template nel file hpp perche' il compilatore ha bisogno di tutta la definizione della classe al momento dell'instanziazione del template.

Non puoi usare i cpp. O meglio, nello standard non puoi, alcuni compilatori provano a fare i furbini.

Meglio ancora, usi la classe std::stack di STL.

non posso è per scuola, vuole che la implementiamo noi.. più avanti useremo la STL.. comunque ho messo tutta la classe in un .hpp e ora funziona.. grazie mille a entrambi :)