dando un occhiata su altri header ho notato che risolvono questo problema come dite voi...ma a me non funziona ancora. gli header si includono ai cpp ma non a vicenda. Vi posto il codice

codice:
//file game.h
#ifndef _GAME_H_
#define _GAME_H_

#include "Gun.h"
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
using namespace gui;

class Game : public IEventReceiver
{
public:

	Game(bool fullscreen, bool music, bool shadows, bool additive, bool vsync, video::E_DRIVER_TYPE driver);

	~Game();

	void run();

	virtual bool OnEvent(SEvent event);

//funzioni
	void loadSceneData();
        void prepare();
        void setCamera();


	bool fullscreen;
	bool music;
	bool shadows;
	bool additive;
	bool vsync;

	ICameraSceneNode* camera;
	E_DRIVER_TYPE driverType;

//solite robe
    IrrlichtDevice *device;
    IVideoDriver* driver;
    ISceneManager* smgr;
    IGUIEnvironment* guienv;

//objects

    Gun* gun;//<------------------------------ERRORE!!!
};

#endif

//file gun.h

#ifndef _GUN_H_
#define _GUN_H_

#include <irrlicht.h>
#include "game.h"


using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
using namespace gui;

class Gun
{
    private:
        //solite robe
        IrrlichtDevice *device;
        IVideoDriver* driver;
        ISceneManager* smgr;
        IGUIEnvironment* guienv;

        //camera
        ICameraSceneNode* camera;

        //Gun node & mesh
        IAnimatedMesh* gun_mesh;
        IAnimatedMeshSceneNode* gun_node;
    
    public:
    Gun(Game* game);//<-------------------ERRORE!!!
    ~Gun();

};
#endif