Salve e buon anno a tutti,
sto facendo un progetto con C++ e devo implementare due dizionari: uno con Red Black e un altro con Hash Table; il tutto tramite classi astratte.
Riassumendo un po' le classi ho fatto una classe astratta (quindi non istanziabile) che contiene le "cose in comune" dei due dizionari e poi gli altri due che derivano da questa classe astratta (quindi ho implementato i metodi che avevo dichiarato virtual) più la propria implementazione (abbastanza complicata).
Il mio problema è che devo arrivare al menù di scelta che devo avere una istanza di tipo puntatore a VOCABOLARIOHT
oppure una istanza di tipo puntatore a VOCABOLARIORB. Questo perchè le funzioni nel menù sono scritte in questo modo: istanza_vocabolario->Inserisci(word) oppure istanza_vocabolario->Ricerca(word).
Comunque in un progetto che ho visto si adoperava in questo modo:
VocabolarioRB * istanza_vocabolario = new VocabolarioRB;
if(scelta_vocabolario == 2) {
delete istanza_vocabolario;
VocabolarioHT * istanza_vocabolario = new VocabolarioHT;
E funziona!!
Nel mio progetto ho fatto una cosa simile ma non funziona l'allocazione nel new, mi dice che poi istanza_vocabolario non viene vista! Come se la new non funzionasse :s
Se riesco a farlo funzionare "sintatticamente" ha errori logici (per via di questa istanza) e crasha quando scelgo il vocabolario che ho istanziato nell'if.
Se faccio in questo modo:
if(scelta_vocabolario == 1) {
VocabolarioHT * istanza_vocabolario = new VocabolarioHT;
else
VocabolarioRB * istanza_vocabolario = new VocabolarioRB;
c'è un errore di scope.
Ho fatto anche un algoritmo "bruto" che se la scelta era il primo dizionario allora istanziavo quel dizionario e facevo TUTTO il codice mentre se sceglievo l'altor ho ripetuto tutte il codice (giusto per avere la conferma che l'errore fosse nell'istanza) e mi funzionano entrambi.
Cosa potrebbe essere? Provo a cambiare compilatore?
EDIT: lavoro con CodeBlocks