this pointer verandert?

Status
Niet open voor verdere reacties.

Murdocki

Gebruiker
Lid geworden
7 jun 2007
Berichten
449
hey,

ik heb een probleempje waarvan ik de oorzaak noch oplossing weet. Ik heb een array waarin ik een object wil stoppen maar het adres van dit object is tijdens de constructor anders dan wanneer dit object in het array geplaatst is. dit terwijl ik het adres met "this" op vraag (dit is een constante pointer). ik heb een aantal notities gemaakt van adressen die zet ik hier onder:

in constructor van scene:
scene's this: 0x00c6fcd8
scene's canvas: 0x00336d18
scene's canvas's scene: 0x00c6fcd8

in scenemanager:
array's start: 0x003367dc
array's canvas: 0x00336d18
array's canvas's scene: 0x00c6fcd8

in initialize van scene:
scene's this: 0x003367dc

de code hierbij is als volgt ( omliggende code heeft naar mijn idee geen invloed )
( onderstreepte code ook niet )

constructor van Scene
Code:
Scene::Scene( int width, int height, bool fullscreen, char* name )
: name( name )
{
	canvas = new Canvas( this, width, height, fullscreen );
	[U]window = 0;[/U]
}

Root (dit is het stukje dat uitgevoerd wordt)
Code:
bool SceneManager::createDefaultScene()
{
	scenes[ 0 ] = Scene( 800, 600, false, "defaultScene" );
	if( !scenes[ 0 ].initialize() )
		return false;
[U]	if( !scenes[ 0 ].createWindow() )
		return false;

	if( renderer->isUsable() )
	{
		renderer->createDevice( scenes[ 0 ].getCanvas() );
		renderer->reset();
	}

	return true;[/U]
}

dus:
de scenemanager heeft een array van scenes
een scene heeft een canvas
een canvas heeft de scene die hem aangemaakt heeft

probleem is dus dat het canvas het oude adres van zijn scene bewaart terwijl dit adres verandert.
dingen die opvallen:
-in de constructor van scene zijn de adressen van scene naar canvas en terug goed gelinkt.
-als de scene in de array zit kent de canvas nog het juiste oude adres en de scene kent nog het goeie canvasadres
-in initialisatie van hetzelfde sceneobject wijst this ergens anders heen dan in de constructor. namelijk nu naar het begin van de array.

bvd,

Murdocki
 
Code:
scenes[ 0 ] = Scene( 800, 600, false, "defaultScene" );

moet dit niet zijn:
Code:
scenes[ 0 ] = new Scene( 800, 600, false, "defaultScene" );

of werk ik al te lang met JAVA ;)
 
mja ik dacht er ook al aan om het een lijst van pointers te maken maar dat doe ik liever niet want dan moet ik m'n ontwerp ook weer aanpassen dus als het zo kan dan doe ik het liever zo
 
laat maar ik maak er wel een array gebaseerd op pointers van
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan