2012-01-25 3 views
1

나는 내 개체의 벡터 벡터를 가지고 있으며이 벡터의 포인터를 얻습니다. 내 문제는 그걸로 반복자를 만들 수 없다는 것입니다. 이 내 코드 : vectorMap 내가이벡터와 반복기의 벡터에 대한 포인터

나는이 어떻게 할 수 할 수있는 포인터가 아닌 경우

vector<vector<AbstractBlock*>> *vectorMap = _level->getMap()->getVectorMap(); 

for(vector<AbstractBlock*>::iterator i = vectorMap[colonneX-1].begin(); i < vectorMap[colonneX-1].end(); i++) 
{ 
    /*some operations*/ 
} 

그것은, vectorMap [colonneX-1] .begin()에 실패?

감사합니다.

+1

의미 바늘; '(* vectorMap) [colonneX-1]'을 시도하십시오. 어쨌든 처음부터 왜 그렇게 많은 포인터를 사용하고 있습니까? 히든 ... – ildjarn

+0

더 많은 참조와 적은 포인터를 사용하는 것이 좋습니다. – ypnos

답변

3

역 참조 vectorMap는 :

for(vector<AbstractBlock*>::iterator i = (*vectorMap)[colonneX-1].begin(); 
    i != (*vectorMap)[colonneX-1].end(); i++) 
+0

아, 그래, 그게 내가 시도한 위대한 작품 * (vectorMap)이 작동하지 않는다. – Guillaume

+0

연산자'[]'는 '*'보다 우선 순위가 높다. – hmjd

0

vectorMap는 벡터에 대한 포인터가 아닌 벡터이다. 그들은 서로 다른 두 가지입니다. 포인터는 단순히 벡터를 가리키며, 동일하지 않습니다. vectorMap을 참조 해제해야합니다.

0

간접 지정의 실수입니다. 그러나 두 가지 다른 의미가있을 수 있습니다.

vectormap이 포인터 인 경우, vectormap[x]은 x 축째 vectormap이고 가상의 vector<vector<AbstractBlock*>> 배열입니다.

iterator 유형과 일치하지 않기 때문에 이상하다는 것을 알았습니다.

그러나 *vectormap(*vectormap)[x] 누구의 반복자 두 번 역 참조하면, AbstractBlockvector<AbstractBlock*>>이다하는 vector<vector<...>>입니다. `vectorMap`는 [colonneX-1] '사용하지 않는`벡터 <>'의`연산자 [] ', 그것은로 인덱싱있어 포인터'vectorMap이므로

가능성이 가장 높은

for(vector<AbstractBlock*>::iterator i = (*vectorMap)[colonneX-1].begin(); 
    i != (*vectorMap)[colonneX-1].end(); i++) 
    (**i).abstractblock_methodcall(); 
+0

설명해 주셔서 감사합니다! – Guillaume

관련 문제