In un progetto in cui sto implementando la codifica di Huffman, ho necessità di utilizzare come coda di priorità un ABR ma ho un problema nella creazione della funzione inserisci. Vi posto prima di tutto la class nodo che ho utilizzato:
Questa invece è l'implementazione della funzione:codice:class nodo { private: int frequenza; unsigned char valore; nodo *sinistro; nodo *destro; public: nodo() {}; nodo(int f, unsigned char v) {frequenza = f; valore = v;}; ~nodo() {}; void setFrequenza(int f) {frequenza = f;}; int getFrequenza() {return frequenza;}; void setValore(unsigned char v) {valore = v;}; int getValore() {return valore;}; void setSinistro (nodo *s) {sinistro = s;}; nodo getSinistro() {return *sinistro;}; void setDestro (nodo *d) {destro = d;}; nodo getDestro() {return *destro;}; };
Ho aggiunto un paio di cout per cercare l'errore ed ovviamente è la riga:codice:void abr::insertABR(int d, unsigned char v) { nodo* t = new nodo; cout << "Nodo t = " << t; nodo* parent; t->setFrequenza(d); cout << "Set d di t a " << d; t->setValore(v); cout << "Set v di t a " << v; t->setSinistro(nullptr); t->setDestro(nullptr); parent = nullptr; cout << "Nodo parent = " << parent; if(isEmpty()) { root = t; cout << "Albero vuoto, root settata a t " << t; } else { nodo* curr; curr = root; cout << "Nodo curr = " << curr; while(curr) { parent = curr; if(t->getFrequenza() > curr->getFrequenza()) { cout << "Scende a destra: " << t->getFrequenza() << " e' maggiore di " << curr->getFrequenza(); curr = curr->getDestro(); cout << curr; } else { cout << "Scende a sinistra: " << t->getFrequenza() << " e' minore di " << curr->getFrequenza(); curr = curr->getSinistro(); cout << curr; } } if(t->getFrequenza() < parent->getFrequenza()) { parent->setSinistro(t); cout << "t diventa figlio sinistro di " << parent << endl; } else { parent->setDestro(t); cout << "t diventa figlio destro di " << parent << endl; } }
riportandomi l'errore cannot convert nodo to *nodo in assignment. Se le cambio in *curr mi parte ma mi va in crash quando raggiunge quella parte di codice.codice:ù curr = curr->getDestro(); curr = curr->getSinistro();
Come potrei risolvere?

Rispondi quotando
