So the following code compiles but i'm not sure if it's doing what I want it to do... (VS2010 for reference)

// Declarations

typedef std::map<unsigned int, QGF6::GameObject*> localMap;
localMap lMap;

// Code in a function that I might be using with the wrong logic:

lMap.find(p.id)->second->getPhysics()->setLinearVelocity(linVel);

Intended Logic:

Find the unsigned int value in the map that equals p.id(another unsigned int) then to that member of the map, access it's second data type(GameObject*) and do stuff.


So the question is whether or not that should be working 'as intended' ? It compiles but as I'm having bugs with velocity I'm thinking it might be a misunderstanding of the std::map class.

有帮助吗?

解决方案

That will work only if the searched item is actually present in the map. Otherwise using it will cause undefined behavior. You should use something like the following

 std::map<unsigned int, QGF6::GameObject*>::iterator itr = lMap.find(p.id);
 if(itr!= lMap.end()){ //found
  //use it
 }

or,

 QGF6::GameObject* obj = lMap[p.id];
 if( obj!=nulptr){
  //use it
 }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top