PDA

Visualizza la versione completa : [DevC++] Problemi con ereditarietà


Loue
01-07-2009, 01:46
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:




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


Grazie del supporto!! :fagiano:

Loading