Historique des modifications - Message

Message #6030

Sujet: Plantage programme au démarrage


Type Date Auteur Contenu
Dernière modification 14-02-2009 12:15:22 sharksfh
Ah oui c'est effectivement ça smile

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ébutant smile


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 message 14-02-2009 11:05:09 sharksfh
Ah oui c'est effectivement ça smile

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ébutant smile


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

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
157 invités en ligne
membre en ligne: -
RSS Feed