2011-11-15 5 views
1

を出力++のSTLマップイテレータ:Cの値私は、次のコードを有する六角

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の10進数で表示されますが、イテレータを使用して値を返すと(前述のように)、base16の16進数で表示されます。

ただ、完全を期すために、次の行がbase10として表示されます。

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

私はbase10を表示するには、イテレータをしたいと思います。

ありがとうございました。

答えて

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

関連する問題