Historique des modifications - Message

Message #6030

Sujet: Plantage programme au démarrage


TypeDateAuteurContenu
Dernière modification14-02-2009 12:15:22sharksfh
Ah oui c'est effectivement çasmile

j'avais oublié de faire le :

ge = new graphicEngine();

bon du coup faut pas que j'oublie de le désalouer après :
game::~game()
{
	delete ge;

}

Merci pour ton aide! Erreur du débutantsmile


EDIT : Maintenant nouveau problème.. Bon soi j'ai un gros souci avec les classes... soit Visual C++ est contre moi...

Toujours un problème de classe.. ce que j'ai codé me semble pourtant correct :

main.cpp
#include <IRR/irrlicht.h>
#include "game.h"


int main()
{
	game game;
	game.init();
	return 0;
}

game.h
#pragma once

#include <IRR/irrlicht.h>
#include <iostream>
#include "graphicEngine.h"

#pragma comment(lib, "Irrlicht.lib")

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

#ifndef DEF_GAME
#define DEF_GAME

class graphicEngine;


class game
{
public :
	game();
	~game();
	void init();
private :
	graphicEngine *ge;

};

#endif

game.cpp
#include "game.h"


game::game()
{
	
}


game::~game()
{
	delete ge;
}


void game::init()
{
	ge = new graphicEngine();
	ge->init();
	ge->rendu();

}

graphicEngine.h
#pragma once


#ifndef DEF_GRAPHICENGINE
#define DEF_GRAPHICENGINE

#include <IRR/irrlicht.h>
#include <iostream>
#include "game.h"
#include "SceneManager.h"


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

class SceneManager;


class graphicEngine
{
public :
	graphicEngine();
	~graphicEngine();
	void init();
	void rendu();
	void getDevice(IrrlichtDevice *cpyDevice); //qui sert a récupérer le device (peut etre l'erreur bien de la... je suis encore maladroit avec les 
                                                                      // entrée/sortie entre les classes/fonction
	void getDriver();

private :
	IrrlichtDevice *device;
	IVideoDriver *driver;
	SceneManager *smgr;
};

#endif

graphicEngine.cpp
#include "graphicEngine.h"



graphicEngine::graphicEngine() : device(0), driver(0)
{
	
}


graphicEngine::~graphicEngine()
{
	delete smgr;
}

void graphicEngine::init()
{
	device = createDevice(EDT_DIRECT3D9, dimension2d<s32>(800,600), 32, false, true, false);
	driver = device->getVideoDriver();
	smgr = new SceneManager();
	smgr->init();
	
}


void graphicEngine::rendu()
{
	while( device->run() )
	{
		driver->beginScene(true, true, SColor(255, 128, 128, 128));
		smgr->drawAll();
		driver->endScene();
	}

	device->drop();
}

void graphicEngine::getDevice(IrrlichtDevice *cpyDevice)
{
	cpyDevice = device;
}

SceneManager.h
#pragma once

#ifndef DEF_SCENEMANAGER
#define DEF_SCENEMANAGER

#include <IRR/irrlicht.h>
#include <iostream>
#include "graphicEngine.h"

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

class graphicEngine;

class SceneManager
{
public:
	SceneManager();
	~SceneManager();
	void init();
	void drawAll();

private:
	ISceneManager *smgr;
	graphicEngine *dev;
	IrrlichtDevice *copyDevice;
	
};

#endif

SceneManager.cpp
#include "SceneManager.h"


SceneManager::SceneManager()
{
	dev = new graphicEngine();
	dev->getDevice(copyDevice);
}



SceneManager::~SceneManager()
{
	delete dev;
}

void SceneManager::init()
{
	smgr = copyDevice->getSceneManager();
}

void SceneManager::drawAll()
{
	smgr->drawAll();
}

Alors enfaite j'voulais mettre le SceneManager à par pour pouvoir le traité à part.. Mais voilà.. ça compile bien mais ça crash encore... pourtant je pense avoir bien instancié tous les objets.
Création du message14-02-2009 11:05:09sharksfh
Ah oui c'est effectivement çasmile

j'avais oublié de faire le :

ge = new graphicEngine();

bon du coup faut pas que j'oublie de le désalouer après :
game::~game()
{
	delete ge;

}

Merci pour ton aide! Erreur du débutantsmile


EDIT : Maintenant nouveau problème.. Bon soi j'ai un gros souci avec les classes... soit Visual C++ est contre moi...

Toujours un problème de classe.. ce que j'ai codé me semble pourtant correct :

main.cpp
#include <IRR/irrlicht.h>
#include "game.h"


int main()
{
	game game;
	game.init();
	return 0;
}

game.h
#pragma once

#include <IRR/irrlicht.h>
#include <iostream>
#include "graphicEngine.h"

#pragma comment(lib, "Irrlicht.lib")

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

#ifndef DEF_GAME
#define DEF_GAME

class graphicEngine;


class game
{
public :
	game();
	~game();
	void init();
private :
	graphicEngine *ge;

};

#endif

game.cpp
#include "game.h"


game::game()
{
	
}


game::~game()
{
	delete ge;
}


void game::init()
{
	ge = new graphicEngine();
	ge->init();
	ge->rendu();

}

graphicEngine.h
#pragma once


#ifndef DEF_GRAPHICENGINE
#define DEF_GRAPHICENGINE

#include <IRR/irrlicht.h>
#include <iostream>
#include "game.h"
#include "SceneManager.h"


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

class SceneManager;


class graphicEngine
{
public :
	graphicEngine();
	~graphicEngine();
	void init();
	void rendu();
	void getDevice(IrrlichtDevice *cpyDevice); //qui sert a récupérer le device (peut etre l'erreur bien de la... je suis encore maladroit avec les 
                                                                      // entrée/sortie entre les classes/fonction
	void getDriver();

private :
	IrrlichtDevice *device;
	IVideoDriver *driver;
	SceneManager *smgr;
};

#endif

graphicEngine.cpp
#include "graphicEngine.h"



graphicEngine::graphicEngine() : device(0), driver(0)
{
	
}


graphicEngine::~graphicEngine()
{
	delete smgr;
}

void graphicEngine::init()
{
	device = createDevice(EDT_DIRECT3D9, dimension2d<s32>(800,600), 32, false, true, false);
	driver = device->getVideoDriver();
	smgr = new SceneManager();
	smgr->init();
	
}


void graphicEngine::rendu()
{
	while( device->run() )
	{
		driver->beginScene(true, true, SColor(255, 128, 128, 128));
		smgr->drawAll();
		driver->endScene();
	}

	device->drop();
}

void graphicEngine::getDevice(IrrlichtDevice *cpyDevice)
{
	cpyDevice = device;
}

SceneManager.h
#pragma once

#ifndef DEF_SCENEMANAGER
#define DEF_SCENEMANAGER

#include <IRR/irrlicht.h>
#include <iostream>
#include "graphicEngine.h"

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

class graphicEngine;

class SceneManager
{
public:
	SceneManager();
	~SceneManager();
	void init();
	void drawAll();

private:
	ISceneManager *smgr;
	graphicEngine *dev;
	IrrlichtDevice *copyDevice;
	
};

#endif

SceneManager.cpp
#include "SceneManager.h"


SceneManager::SceneManager()
{
	dev = new graphicEngine();
	dev->getDevice(copyDevice);
}



SceneManager::~SceneManager()
{
	delete dev;
}

void SceneManager::init()
{
	smgr = copyDevice->getSceneManager();
}

void SceneManager::drawAll()
{
	smgr->drawAll();
}

Alors enfaite j'voulais mettre le SceneManager à par pour pouvoir le traité à part.. Mais voilà.. ça compile bien mais ça crash encore... pourtant je pense avoir bien instancié tous les objets.

Retour

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
125 invités en ligne
membre en ligne: -
RSS Feed