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