PDA

Visualizza la versione completa : [C++] problema dipendenza file Header


gaten
09-10-2014, 01:04
Salve ragazzi io ho i seguenti due file header

State.h e StateManager.h

State.h:



class State {
public:
//StateManager manager;
virtual void init()=0;
virtual void update()=0;
virtual void destroy()=0;
};


StateManager.h


class StateManager {
public:
StateManager();
template <class T> State changeState();
void update();
private:
State currentState;
};




Non capisco come mai se in State manager dichiaro "State *currentState"(con *) non da errrore mentre se ometto * da errore



1>------ Inizio compilazione: Progetto: SuperMarioBros, Configurazione: Debug Win32 ------
1> Menu.cpp
1>c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\statem anager.h(12): error C2259: 'State': impossibile creare un'istanza di classe astratta
1> a causa dei seguenti membri:
1> 'void State::init(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(7): vedere la dichiarazione di 'State::init'
1> 'void State::update(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(8): vedere la dichiarazione di 'State::update'
1> 'void State::destroy(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(9): vedere la dichiarazione di 'State::destroy'
1> Generazione del codice in corso...
1> Compilazione in corso...
1> StateManager.cpp
1>c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\statem anager.h(12): error C2259: 'State': impossibile creare un'istanza di classe astratta
1> a causa dei seguenti membri:
1> 'void State::init(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(7): vedere la dichiarazione di 'State::init'
1> 'void State::update(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(8): vedere la dichiarazione di 'State::update'
1> 'void State::destroy(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(9): vedere la dichiarazione di 'State::destroy'
1> Generazione del codice in corso...
1> Compilazione in corso...
1> main.cpp
1>c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\statem anager.h(12): error C2259: 'State': impossibile creare un'istanza di classe astratta
1> a causa dei seguenti membri:
1> 'void State::init(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(7): vedere la dichiarazione di 'State::init'
1> 'void State::update(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(8): vedere la dichiarazione di 'State::update'
1> 'void State::destroy(void)': astratta
1> c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\state. h(9): vedere la dichiarazione di 'State::destroy'
1> Generazione del codice in corso...
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========




Inoltre se notate io necessito che nella classe State ho un attributo di tipo StateManager(quindi dipendo dal file StateManager.h) e nella classe StateManager di un attributo State(quindi dipendo da State.h) , come posso risolvere questa dipendenza?

oregon
09-10-2014, 01:23
Scusa ... il messaggio chiaro

impossibile creare un'istanza di classe astratta

gaten
09-10-2014, 13:19
oregon, grazie per la risposta. Volevo approfittare per domandare questa cosa.
Come mai se nella classe State dichiaro manager come puntatore di tipo StateManager non da errore mentre se lo dichiaro semplicemente come "StateManager manager" da errore?? precisamente mi dice:

error C2079: 'State::manager' utilizza class 'StateManager' non definito

eppure in alto alla class faccio una forward decleration(ps. purtroppo non posso includere il file "StateManager.h" dato che c' dipendenza tra le due classi.

Loading