Buona sera a tutti,
sto lavorando su un progetto impegnativo che è composto da diversi file, quindi non so se è comodo postarlo.
In questo progetto, tra le altre classi, ce ne sono 2 che ereditano entrambe da una superclasse.
Inizialmente avevo fatto un copia-incolla globale di tutti i metodi e le variabili comuni e non, e sono arrivato ad un punto in cui il programma funziona a dovere.
Ho così deciso di migliorarlo introducendo l'ereditarietà. Creata la superclasse contenente i metodi e variabili comuni, ho applicato l'ereditarietà su una delle classi, e tutto funziona correttamente.
Ho cercato di fare la stessa cosa con la seconda in modo massivo e c'erano alcuni errori di run-time di cui non capivo l'origine. Così, utilizzando il principio dell'overriding ho provato ad ereditare variabile per variabile, metodo per metodo.
L'unico successo che ho avuto è stato quando ho ereditato una costante, per qualsiasi variabile o metodo, avviato il programma appare un errore in Windows del tipo
"Si è verificato un errore in progetto.exe. L'applicazione verrà chiusa.", invia, non inviare[...].
Ogni volta che compariva questo errore tornavo sui miei passi, togliendo il commento alla parte che avevo provato ad ereditare. Ho provato ad ereditare due metodi contemporaneamente e c'era quell'errore, ho aspettato un po', riavviato il programma e non c'erano più errori. Ho ereditato un altro metodo e ri-ecco nuovamente l'errore.
Io non so davvero cosa sto sbagliando, magari c'è qualcosa che mi sfugge nell'ereditarietà. Oltre a questo non riesco a fare il debug e prima di avviare il programma cancello ogni volta i files temporanei in modo da ricompilare il tutto da zero.
Posto i prototipi delle classi interessate:
Grazie del supporto!!codice:HEADER FILE DELLA CLASSE SNAKE, LA SUPERCLASSE #ifndef SNAKE_ #define SNAKE_ #include "campoDiGioco.h" #include "pezziDelloSnake.h" using namespace std; class snake { public: campoDiGioco *tabella; bool stampaSnake(campoDiGioco*); virtual int getTasto(); static int righe; int **snakeArray ; void riallocaSnakeArray(); void allocaElementoAggiunto(); static const int COLONNE = 4; static const int SINISTRA=75; static const int DESTRA=77; static const int ALTO=72; static const int BASSO=80; }; #endif HEADER FILE DELLA CLASSE HUMANSNAKE, LA PRIMA DERIVATA PER LA QUALE NON HO PROBLEMI DI EREDITARIETA' #ifndef HUMAN_SNAKE #define HUMAN_SNAKE #include "campoDiGioco.h" #include "snake.h" using namespace std; class humanSnake : public snake { public: humanSnake(); int getTasto(); //ridefinito da virtual int muoviSnake(); }; #endif HEADER FILE DELLA CLASSE VIRTUALSNAKE, CHE STO PROVANDO A DEFINIRE COME EREDITATA DA SNAKE, MA PER COLPA DI QUESTI INSPIEGABILI ERRORI NON CI RIESCO #ifndef VIRTUAL_SNAKE #define VIRTUAL_SNAKE #include "campoDiGioco.h" #include "snake.h" using namespace std; class virtualSnake : public snake { public: void mangiati(); virtualSnake(); int getTasto(); static int random; campoDiGioco *tabella; bool stampaSnake(campoDiGioco*); int getTasto(); virtual int muoviSnake(); int muoviSnake(campoDiGioco*); static int righe; int **snakeArray ; void riallocaSnakeArray(); void allocaElementoAggiunto(); static const int COLONNE = 4; static const int SINISTRA=1; static const int DESTRA=2; static const int ALTO=3; static const int BASSO=4; private: void inizializzaPosizioniProvate(); int randomGenerator (int max, int min); int posizioniProvate [3]; }; #endif![]()



Rispondi quotando