Oppure

Loading
25/01/12 14:59
zEuSsE
Ciao a tutti, ho un problema con l'uso dei puntatori a classi astratte.
provo a schematizzare il codice del problema:


class Base {
virtual void dFunc() {}
};
class Derivata: public Base{
dFunc() {}
};

-----
Base *ptrB;

void foo1(){
ptrB=(Derivata *) new Derivata;
ptrB->dFunc();
}
void foo2(){
(Derivata *)ptrB->dFunc();
}

int main(){
foo1();
foo2();
}



Non so se il codice è chiaro, comunque la situazione è quella in cui io ho una classe astratta (Base) e una normale che implementa i metodi virtuali della prima (Derivata). Nel mio programma ho un puntatore globale alla classe Base, che inizializzo con l'indirizzo di un oggetto della classe Derivata all'interno della funzione foo1. All'interno di questa funzione con il puntatore riesco a richiamare i metodi della classe Derivata. Se invece mi sposto nella funzione foo2, anche se il puntatore punta sempre allo stesso indirizzo di memoria, il compilatore mi dice che è stata richiamata una funzione astratta, come se ptrB stesse puntando alla classe astratta anzichè a quella derivata. Avete idee di cosa sbaglio?
Ultima modifica effettuata da zEuSsE 25/01/12 15:00
aaa
25/01/12 16:30
anthony015
c'è un errore nella riga:
(Derivata *)ptrB->dFunc();

così come è scritto è come se cercassi di castare ptrB->dFunc(), tu, invece vuoi/devi castare ptrB:
((Derivata *)ptrB)->dFunc();
aaa