Ciao a tutti, ho un problema che riguarda i puntatori:
Non capisco perche' avviene questa stranissima cosa:
(vi avverto che nonostante sia una domanda lunga in realta'
il problema e' facile da capire; inoltre se volete potete anche compilarvele da soli
con i comandi :
g++ -c Lista.cpp
g++ -o CodaFifo CodaFifo.cpp Lista.o
e potete eseguire con
./CodaFifo
e rendervi conto del mistero.......)
Considerate le seguenti classi:
Classe Nodo.h
Classe Cella.h:codice:class Nodo{ public: int q1,q2,f_value; Nodo(){ q1 = 0; q2 = 0; f_value=0; } Nodo(int qu1, int qu2, int f_val){ q1 = qu1; q2 = qu2; f_value = f_val; } ~Nodo(){} };
Classe Lista.hcodice:#include "Nodo.h" class Cella{ public: Nodo n; Cella* next; //punta alla prossima cella Cella* pred; // punta alla cella precedente Cella(Nodo n1){ n = n1; next = NULL; pred = NULL; } ~Cella(){} };
La relativa classe Lista.cpp e' formata solo dalle seguenti 2 istruzionicodice:#include "Cella.h" class Lista{ public: Cella* head; // inizio della lista Cella* last; // fine della lista int nOggetti;// numero di oggetti presenti nella lista Lista(){ head = NULL; last = NULL; nOggetti = 0; } ~Lista(){} };
Ora, la classe CodaFifo eredita da Lista: ecco CodaFifo.h:codice:#include <iostream.h> #include "Lista.h"
codice:#include "Lista.h" class CodaFifo : public Lista{ public: CodaFifo(){} ~CodaFifo(){} void inserisci(Nodo n);// inserisce una cella nella coda void cancella(int k);//cancella una cella };
Infine la classe CodaFifo.cpp :
Perche' l.cancella(1) non mi da' il risultato corretto? Il fatto e' che sicuramente c'e' qualche problema con i puntatori perche' il campo nOggetti viene restituito correttamente;Purtroppocodice:#include <iostream.h> #include "CodaFifo.h" // inserisce un nodo in fondo alla coda void CodaFifo :: inserisci(Nodo n){ Cella nuova_cella = Cella(n); if(nOggetti == 0){// se bisogna inserire il primo elemento this->head = &nuova_cella; }else{ nuova_cella.pred = this->last; this->last = &nuova_cella; } nOggetti++; } void CodaFifo::cancella(int k){ // non cancella,mostra solo il contenuto di this->head->n.q1 int a = this->head->n.q1; cout << "sto cancellando; testa :" << a << "Numero oggetti:" << nOggetti << endl; } main(){ Nodo n1,n2,n3; n1 = Nodo(1,82,53); n2 = Nodo(2,37,58); n3 = Nodo(3,28,33); CodaFifo l; l.inserisci(n1); cout << l.head->n.q1 << " " << l.nOggetti << endl; l.inserisci(n2); cout << l.head->n.q1 << " " << l.nOggetti << endl; l.inserisci(n3); cout << l.head->n.q1 << " " << l.nOggetti << endl; l.cancella(1); cout << endl; }
in fase di compilazione non ho nessun erreore dunque la sintassi e' corretta.
Vi prego aiutatemi!!!!!!!!!!!

Rispondi quotando