c ++ stl map итераторы, выводящие значения в шестнадцатеричном виде - PullRequest
1 голос
/ 15 ноября 2011

У меня есть следующий код:

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, однако когда я возвращаю значение с помощью итератора (как указано выше), оно отображается в шестнадцатеричном формате base16.

Только для полноты, следующая строка отображается как base10:

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

Я бы хотел, чтобы итератор отображал base10.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 15 ноября 2011

Когда вы печатаете (ValueHandler*)(itr->second)->getValue(), вы должны получать шестнадцатеричное значение, потому что именно так печатаются указатели.Вы, вероятно, не должны приводить возвращаемое значение getValue() к ValueHandler*.Вы, вероятно, намеревались привести itr->second к этому типу указателя (хотя это и не обязательно), но просто ошиблись в скобках.Вот как выглядит кастинг itr->second:

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

И, вероятно, вам нужно:

itr->second->getValue()
1 голос
/ 15 ноября 2011

(ValueHandler*)(itr->second)->getValue() - это указатель, а не int.Вы приводите значение возврата getValue.

Может быть, вы хотите ((ValueHandler*)(itr->second))->getValue()?Что в любом случае является излишним.

...