2011-11-15 2 views
1

출력 ++의 STL 맵 반복자 :C 값을 I는 다음 코드가 육각

map<StatTypesEnum, ValueHandler*>::const_iterator itr; 

for(itr=player1->Stats.begin(); itr!=player1->Stats.end(); itr++) 
{ 
    cout << "Stat: " << itr->first << " Value: " << (ValueHandler*)(itr->second)->getValue() << endl; 
} 

getValue() 메소드는 int를 반환한다. 내가 이터레이터 외부의 값을 계산하면 base10의 십진수로 표시됩니다. 그러나 iterator를 사용하여 값을 반환하면 (위와 같이) base16, hex로 표시됩니다.

그냥 완성도를 들어, 다음 줄은 유효한 시간으로 표시 나는 유효한 시간을 표시하는 반복자를 원하는

cout << player1->Stats[Power]->getValue() << endl; 

.

감사합니다.

답변

6

(ValueHandler*)(itr->second)->getValue()을 인쇄 할 때 포인터가 인쇄되는 방법이므로 16 진수 값을 가져야합니다. getValue()의 반환 값을 ValueHandler*으로 변환해서는 안됩니다. 해당 포인터 유형에 itr->second을 캐스팅하려했으나 (필요하지는 않지만) 괄호를 잘못 입력했을 수 있습니다.

((ValueHandler*) itr->second)->getValue() 

그리고 당신이 원하는 것은 아마도 : 여기에 캐스팅 itr->second의 모습 무엇

itr->second->getValue() 
+0

예 - 훨씬 간단합니다 - 어떤 이유로 저는 itr-> second를 캐스팅해야한다고 생각했지만 이미 올바른 유형입니다. - 감사 – IUnknown

1

(ValueHandler*)(itr->second)->getValue()int이 아닌 포인터입니다. 반환 값은 getValue입니다.

어쩌면 ((ValueHandler*)(itr->second))->getValue()을 원하십니까? 어쨌든 중복됩니다.

+0

아 그래 - 다시 괄호 안에 손실 - 당신은 모든이를 캐스팅 할 필요가 없습니다 – IUnknown

+0

덕분에, 이터레이터는 어떤 유형인지 알고있다. – littleadv

+0

Gotcha 감사합니다 - 예, 그 bames53의 대답을 보았다. – IUnknown

관련 문제