Witam,
Zaimplementowałem sobie stos z użyciem szablonów.
template <class T>
class Stos
{
private:
struct Node{ T val; Node* next; };
Node* top;
public:
Stos():top(0) {};
void push(const T& el);
T pop();
bool empty();
};
template <class T> bool Stos<T>::empty() {
if (top) return true; else return false;
}
template <class T> void Stos<T>::push(const T& element) {
Node* e = new Node;
e->val = element;
e->next = top;
top = e;
}
template <class T> T Stos<T>::pop() {
if (top)
{
Node* x = top;
T xa = top->val;
top = top->next;
delete x;
return xa;
}
throw "Stos pusty";
}
Kiedy tworzę stos typu prostego, np. integerów, wszystko działa dobrze. Jednak kiedy stworzę sobie taką klasę:
class Osoba
{
private:
string imie;
string nazwisko;
int rokUrodzenia;
public:
Osoba(string imie,string nazwisko,int rokUrodzenia):imie(imie),nazwisko(nazwisko),rokUrodzenia(rokUrodzenia){};
void opis() { cout << endl << "Imie: \t " << imie << endl << "Nazwisko: \t " << nazwisko << endl << "Rok urodzenia: \t" << rokUrodzenia << endl << endl; };
};
Tworzę sobie stos osób, następnie jakąś osobę i próbuję ją wrzucić na ten stos:
Stos<Osoba> stos;
Osoba osoba("Jan","Kiepura",1902);
stos.push(osoba);
to przy próbie wrzucenia jej na stos pojawia się błąd "instantiated from here". W czym leży problem?