Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [C++] problema dipendenza file Header

    Salve ragazzi io ho i seguenti due file header

    State.h e StateManager.h

    State.h:

    codice:
    class State {
        public:
            //StateManager manager;
            virtual void init()=0;
            virtual void update()=0;
            virtual void destroy()=0;
    };
    StateManager.h
    codice:
    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

    codice:
    1>------ Inizio compilazione: Progetto: SuperMarioBros, Configurazione: Debug Win32 ------
    1>  Menu.cpp
    1>c:\users\gaten\documents\visual studio 2013\projects\supermariobros\supermariobros\statemanager.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\statemanager.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\statemanager.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?
    Ultima modifica di gaten; 09-10-2014 a 00:17
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa ... il messaggio è chiaro

    impossibile creare un'istanza di classe astratta
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    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.
    Con i sogni possiamo conoscere il futuro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.