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
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 Cella.h:
codice:
#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(){}
};
Classe Lista.h
codice:
#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(){}
};
La relativa classe Lista.cpp e' formata solo dalle seguenti 2 istruzioni
codice:
#include <iostream.h>
#include "Lista.h"
Ora, la classe CodaFifo eredita da Lista: ecco CodaFifo.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 :
codice:
#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;
}
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;Purtroppo
in fase di compilazione non ho nessun erreore dunque la sintassi e' corretta.
Vi prego aiutatemi!!!!!!!!!!!