[solved] STL kolejka - referencja na wskaznik

0

Witam,
mam smieszny problem zamiany referencji na wskaznik przy kolejce z STL.


class CollisionSolver  : public Singleton<CollisionSolver>{

queue<ObjectOrder> csCollisionOrders;

///(...)
}

CollisionSolver::CollisionSolver(b2World *wd){
///(...)
	//test dziala prawidlowo
	queue<int> qtest;
	qtest.push(666);
	queue<int> * qptr;
	qptr = &qtest;	
	assert(qptr);

}

//ale tutaj 
queue<ObjectOrder> *  CollisionSolver::getOrders(){
		ObjectOrder test;
		queue<ObjectOrder> * qptr;
		csCollisionOrders.push(test); //wywala sie nawet wczesniej czyli tu
		qptr = &csCollisionOrders;
		assert(qptr);   //pusto
		return qptr;
}

jak dodalem wepchniecie do kolejki to okazalo sie ze to tez wywala z tekstem:
Unhandled exception at 0x00403e9a in TestBed.exe: 0xC0000005: Access violation reading location 0x00000000;
co jest dziwne bo w innej funkcji wczesniej dodawalem normalnie elementy...
w Debuggerze kod zatrzymuje się w pliku xutility na linijce:
if (_Myfirstiter != _IGNORE_MYITERLIST)

Nie wiem czy to moja wina, ze o czyms nie wiem czy...
</cpp>

0

A ObjectOrder ma zrobiony konstruktor kopiujący (jeśli to konieczne)?

0

Chmm
ObjectOrder to zwykły struct z trzema elementami, nie posiada zadnych konstruktorów, nie sądzę żeby queue wymagał implementacji kopiowania O_0.

Dodałem zwykłe kopiowanie:

queue<ObjectOrder> csco ;
csco= csCollisionOrders;

w konstruktorze klasy i w funkcji gdzie się pieprzy i w konstruktorze działa, a w getorders() wywala sie w funkcji operatora= queue ; /

Nie wiem czym to idzie... zawsze omijałem STL i chyba słusznie...
; F

struct ObjectOrder{
	Object* o1;
	Object* o2;
	ObjectOrderType ordertype;
};
0

[...] i w konstruktorze działa, a w getorders() wywala sie w funkcji operatora= queue

No to jest jeszcze taka opcja, że obiekt, na rzecz którego wywołujesz getOrders nie istnieje. Sprawdź to, bo jeśli ObjectOrder wygląda dokładnie tak, jak podałeś, to nie w kopiowaniu jest problem.

zawsze omijałem STL i chyba słusznie...

Niesłusznie...

0
0x666 napisał(a)

No to jest jeszcze taka opcja, że obiekt, na rzecz którego wywołujesz getOrders nie istnieje. Sprawdź to, bo jeśli ObjectOrder wygląda dokładnie tak, jak podałeś, to nie w kopiowaniu jest problem.

Heh jaki obciach ; D masz racje, byłem pewny ze istnieje ale to była dziedziczona klasa i się myliłem... bosh
zasugerowałem się też że od razu się nie wywala tylko pod koniec funkcji.. ; p
thx za pomoc ; )

1 użytkowników online, w tym zalogowanych: 0, gości: 1