Voglio realizzare una classe lista dinamica dove gli elementi della lista sono oggetti istanze della classe studente avente semplicemente come attributi il nome ed un numero.
questa è la mia realizzazione:
#include <iostream>
#include <string>
using namespace std;
class studente {
public:
studente(string _nome,int _num){setNome(_nome);setNum(_num);}
void setNome(string _nome){nome=_nome;};
void setNum(int _num){num=_num;}
string getNome(){return nome;}
int getNum(){return num;}
private:
string nome;
int num;
};
struct nodo{
studente elem;
nodo* prec;
};
typedef nodo* P;
class pila{
public:
pila(){start();};
void start(){p=0;}
void push(studente e)
{
P q=new nodo; <--- ERRORE
q->prec=p;
p=q;
p->elem=e;
}
void pop(studente &e)
{
P q=p;
e=p->elem;
p=p->prec;
delete q;
}
void stampa(){
P temp=p;
while(temp!=NULL){
cout<<temp->elem.getNome()<<" "<<temp->elem.getNum()<<" ";
temp=temp->prec;
}cout<<endl;
}
private:
P p;
};
int main()
{
pila p;
studente e("tiziano",10);
p.push(e);
p.stampa();
studente x("fabio",9);
p.push(e);
p.stampa();
system("pause");
cout<<"\n\nESTRAZIONE\n\n";
p.pop(e);
p.stampa();
system("pause");
return 0;
}
all' istruzione
P q=new nodo; del metodo push() mi da errore segnalandomi
member function `void pila::push(studente)':
error: no matching function for call to `nodo::nodo()'
note: candidates are: nodo::nodo(const nodo&)
qual è il problema?