Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95

    [C++]'Unit': classe base non definita

    Salve! Ho un problema. Nel mio progetto ho una classe "MovableUnit" che deriva da "Unit".

    MovableUnit.h:
    codice:
    #ifndef _MOVABLEUNIT_H_
    #define _MOVABLEUNIT_H_
    
    #include "Unit.h"
    #include <OgreNewt.h>
    class Application;
    class Unit;
    
    class MovableUnit : public Unit{
    	public:
    		MovableUnit(Application* game,SceneManager* mSceneMgr,OgreNewt::World* m_World);	
    	private:
    	
    	protected:
    
    };
    
    #endif
    Il problema è che quando mi compila Unit.cpp, include ovviamente Unit.h, che include "Application.h" che include anche "MovableUnit.h"

    e mi restituisce questo errore:

    Unit.cpp
    f:\cadue\c++\strategy\source\MovableUnit.h(9) : error C2504: 'Unit': classe base non definita

    Praticamente se una classe A deriva da B la classe B non può includere l'header di A? Se è così non so proprio come fare, perchè dovrei dire ad Unit.h di includere Application.h ma NON includere "MovableUnit.h" che però Application.h include a sua volta.
    Non ci capisco proprio niente! Qualcuno ha idea di come risolvere?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non capisco perche', se hai inserito

    #include "Unit.h"

    allora indichi anche

    class Unit;

    Dovrebbe bastare la prima ...

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Infatti: la dichiarazione anticipata serve proprio per evitare di includere file di intestazione.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95
    Anche se tolgo la dichiarazione anticipata di Unit comunque l'errore permane!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La dichiarazione va tolta.

    Poi si deve vedere il contenuto di tutti i file .h per farsi un'idea completa ...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95
    allora:

    MOVABLE_UNIT.H:
    codice:
    #ifndef _MOVABLEUNIT_H_
    #define _MOVABLEUNIT_H_
    
    #include "Unit.h"
    #include <OgreNewt.h>
    class Application;
    
    class Unit{};
    
    class MovableUnit : public Unit{
    	public:
    		MovableUnit(Application* game,SceneManager* mSceneMgr,OgreNewt::World* m_World);	
    	private:
    	
    	protected:
    
    };
    
    #endif
    Unit.h
    codice:
    #ifndef _UNIT_H_
    #define _UNIT_H_
    
    #include "Application.h"
    #include <OgreNewt.h>
    class Application;
    
    class Unit : public FrameListener, public KeyListener {
    	public:
    		SceneManager* mSceneMgr;
    		OgreNewt::World* m_World;
    		Application* game;
    	
    		Entity* unitEntity;
    		SceneNode* unitNode;
    		OgreNewt::Body* unitBody;
    
    		AnimationState* AnimState;
    		SkeletonPtr Skel;
    
    	
    		Unit(Application* game,SceneManager* mSceneMgr,OgreNewt::World* m_World);	
    		
    		void Update();
    
    		bool frameStarted(const FrameEvent& evt);
    
    		void keyClicked(KeyEvent* e); 
    		void keyPressed(KeyEvent* e) {}
    		void keyReleased(KeyEvent* e) {}
    		
    		bool isSelected(){return selected;}
    		int getId(){return id;}
    	private:
    		void Init();
    		
    	protected:
    		 bool mouse0left, mouse1left;
    		 int id;
    		 bool hasLife;
    		 bool showLifeBar;
    
    		 CEGUI::StaticImage* lifeBar;
    
    		 bool selected;
    		 EventProcessor* mEventProcessor;
    		 InputReader* mInputDevice;
    
    };
    
    
    #endif
    Application.h:
    codice:
    #ifndef _APPLICATION_H_
    #define _APPLICATION_H_
    #pragma once
    
    #include <Newton.h>
    #include <OgreNewt.h>
    #include "DeleteManager.h"
    #include "ExampleApplication.h"
    #include <string.h>
    #include <fstream>
    
    #include "Gui.h"
    #include "Map.h"
    #include "Unit.h"
    #include "MovableUnit.h"
    
    #define CAM_TRANSLATION_SPEED 200
    
    
    using namespace std;
    class AppFrameListener;
    class GuiInterface;
    class Map;
    class MovableUnit;
    
    class Application :
    	public ExampleApplication
    {
    public:
    	Application(void);
    	~Application(void);
    
    	OgreNewt::World* m_World;
    	const OgreNewt::MaterialID* mMatDefault;
    	const OgreNewt::MaterialID* mMatConveyor;
    	OgreNewt::MaterialPair* mMatPairDefaultConveyor;
    
    
    	Ogre::FrameListener* mNewtonListener;
    	AppFrameListener* mFrameListener;
    	void createFrameListener();
    	void createScene();
    	Ogre::SceneNode* msnCam;
    	RenderWindow* Window;
    
    	DeleteManager* deleteMgr;
    
    	float Time;
    	FrameEvent frameEvent;
    	//debug
    	ofstream out;
    	//
    
    	GuiInterface* gui;
    	Map* map;
    	MovableUnit* unit;
    
    protected:
    	
    private:
    
    
    };
    
    #endif

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma scusa, questa

    class Unit{};

    a che serve?

    La classe e' dichiarata nella unit.h ....

    Ma anche le varie

    class Application;

    non servono ... la classe e' dichiarata nella application.h

    A questo punto e' necessario conoscere anche il contenuto del main.cpp per capire cosa hai incluso ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95
    Ops! scusa, hai ragione,

    class Application; e class Unit{}; le devo levare, stavo facendo giusto una prova.
    Le altre dichiarazioni anticipate mi servono perchè all'interno della classe ho metodi che fanno riferimento ad altre classi.
    Devo postare altro?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti avevo chiesto il main.cpp ...

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95
    Scusami, ecco:

    codice:
    #pragma comment(lib, "newton.lib")
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include "Application.h"
    
    INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
    {
     
        Application app;
    
            app.go();
        return 0;
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.