Problema Template C++

di il
2 risposte

Problema Template C++

Ciao a tutti, oggi a lezione mi è stato spiegato il template e mi è stato portato come esempio la creazione di uno stack. Ho quindi provato a farlo da solo per vedere se avevo capito creando prima lo stack senza template e funziona come dovrebbe e poi applicando il template.
Questo è il file .h
#include <iostream>
#define MAX 100
using namespace std;

template <typename T>
class Stack
{
	private:
		T elementi[MAX];
		int top;
	public:
		Stack();
		~Stack();
		bool push(T a);
		bool pop(T &a);
};
questo il file .cpp
#include <iostream>
#define MAX 100
#include "stack.h"
using namespace std;

template <typename T>
Stack <T> :: Stack()
{
	top=0;
}

template <typename T>
Stack <T> :: ~Stack()
{
}

template <typename T>
bool Stack <T>:: push(T a)
{
	if(top<(MAX-1))
	{
		elementi[++top]=a;
		return true;
	}
	else
	return false;
}

template <typename T>
bool Stack <T>:: pop(T &a)
{
	if(top<0)
	return false;
	else
	{
		a=elementi[top--];
		return true;
	}
}
E questo il main giusto per verificare il funzionamento
#include <iostream>
#define MAX 100
#include "stack.h"
using namespace std;

main()
{
	int numero;
	int scelta;
	bool b;
	Stack <int> s;

	cout<<"\nSi inserisca il valore da inserire nella lista: ";
	cin>>numero;

	b=s.push(numero);
	if(b==false) cout<<"error"<<endl;
	else cout<<"inserito"<<endl;

	b=s.pop(numero);
	if(b==false) cout<<"error"<<endl;
	else cout<<"rimosso il numero: "<<numero<<endl;


}
La compilazione riesce ma quando provo a linkare i file objct ho questa serie di errori:
main.o: nella funzione "main":
main.cpp:(.text+0x17): riferimento non definito a "Stack<int>::Stack()"
main.cpp:(.text+0x51): riferimento non definito a "Stack<int>::push(int)"
main.cpp:(.text+0xb8): riferimento non definito a "Stack<int>::pop(int&)"
main.cpp:(.text+0x125): riferimento non definito a "Stack<int>::~Stack()"
main.cpp:(.text+0x13e): riferimento non definito a "Stack<int>::~Stack()"
collect2: error: ld returned 1 exit status
Sapete dirmi cosa potrebbe causare questo problema?? Lo stack senza template non genera alcun problema nè di compilazione nè di link. Grazie in anticipo

La compilazione dei file riesce ma mi viene dato come errore

2 Risposte

  • Re: Problema Template C++

    Quando si scrivono funzioni o classi template, è obbligatorio che tutta l'implementazione sia contenuta nell'header file. (Inserire l'implementazione in un file.cpp è un errore tipico dei neofiti dei template).
  • Re: Problema Template C++

    Grazie mille non mi era stato detto... tutto risolto!!
Devi accedere o registrarti per scrivere nel forum
2 risposte