Grazie della risposta si sto cercando di implementare una linkedlist e ho risolto il problema con operatore << ma adesso ho dei problemi con il distruttore in cui metto la funzione delete (che ho rivisto) che rilascia array creato dinamicamente però ho notato che il programma lo richiama molte volte durante l'esecuzione, dovrebbe richiamarlo solo quando esce dallo scope o quando il programma termina
#include <iostream>
using namespace std;
class nodo {
private:
string nome;
int hp;
int attacco;
nodo * next;
public:
nodo(string a,int b,int c) : nome(a),hp(b),attacco(c),next(NULL){ }
nodo() : nome("undefined"),hp(99),attacco(0),next(NULL){ }
string get_nome();
int get_hp();
int get_attacco();
nodo* nodo_next();
void set_nome(string x);
void set_hp(int x);
void set_attacco(int x);
friend ostream& operator<<(ostream& os,const nodo &x){
os << x.nome << endl;
os << x.hp << endl;
os << x.attacco << endl;
return os; }
friend class lista;
};
class lista {
private:
nodo* inizio;
nodo* fine;
public:
lista(){ inizio = fine = NULL; }
~lista(){ delete_list(); }
nodo* front() const;
nodo* back() const;
void pushback(string,int,int);
void popfront();
void delete_list();
void stampa();
friend ostream& operator<<(ostream& os, const lista x){
nodo * scorri = x.front();
if(scorri == NULL)
os << "la lista è vuota" << endl;
while(scorri != NULL){
os << *scorri;
scorri = scorri->nodo_next(); }
return os; }
};
nodo* lista::front() const
{ return inizio; }
nodo* lista::back() const
{ return fine; }
void lista::pushback(string a,int b,int c){
nodo* nuovo = new nodo(a,b,c);
if(fine == NULL)
inizio = fine = nuovo;
else {
fine->next = nuovo;
fine = nuovo; }}
void lista::stampa(){
nodo * scorri = inizio;
while(scorri != NULL){
cout << *scorri;
scorri = scorri-> next; }}
void lista::popfront(){
if(inizio == NULL)
return;
nodo * scorri = inizio;
inizio = inizio->next;
delete scorri;
if(inizio == NULL)
fine = NULL; }
void lista::delete_list(){
nodo * scorri = inizio;
nodo * pre = NULL;
while(scorri == fine){
pre = scorri;
if(scorri == fine)
scorri = scorri->next;
if(pre != NULL)
delete pre; }
inizio = fine = NULL;
cout << "fine"; }
string nodo::get_nome()
{ return nome; }
int nodo::get_hp()
{ return hp; }
int nodo::get_attacco()
{ return attacco; }
nodo* nodo::nodo_next()
{ return next; }
void nodo::set_nome(string x)
{ nome = x; }
void nodo::set_hp(int x)
{ hp = x; }
void nodo::set_attacco(int x)
{ attacco = x; }
int main(){
lista uno;
cout << "prima stampa" << endl;
uno.pushback("primo",500,210);
uno.pushback("secondo",340,110);
uno.pushback("terzo",220,250);
cout << uno;
cout << "elimina il primo" << endl;
uno.popfront();
cout << uno;
cout << "aggiungi quarto" << endl;
uno.pushback("quarto",444,888);
cout << uno;
cout << "cancella la lista" << endl;
uno.delete_list();
cout << uno;
cout << "aggiungi 5 & 6" << endl;
uno.pushback("quinto",544,333);
uno.pushback("sesto",344,777);
cout << uno;
}