Итерация через std:list‹wstring›

Это мой код:

for (std::list<std::wstring>::iterator itr  = kb->titles.begin(); itr != kb->titles.end() ; itr++)
    {
        _size += *itr.size();
    }

То, что я пытаюсь сделать, это получить доступ к каждой wstring, содержащейся в списке, и вызвать ее функцию-член size(). Однако то, на что указывает itr, похоже, не является повторным элементом wstring, и я получаю сообщение об ошибке (ошибка C2039: 'size': не является членом 'std::_List_iterator‹_Mylist>')

Если вам интересно, что такое kb, это указатель на структуру с std::list<std::wstring> titles; в качестве одного из ее членов.

Любые идеи о том, как это исправить?


person ᴘᴀɴᴀʏɪᴏᴛɪs    schedule 17.04.2012    source источник
comment
В C++11 это упрощается благодаря циклу range-for: for (auto title : titles) _size += title.size();   -  person chris    schedule 17.04.2012
comment
@chris Вы, вероятно, хотите, чтобы в этом случае было for( const auto& title : titles ) { /* .. */ }   -  person Praetorian    schedule 17.04.2012
comment
@Prætorian, упс, ты прав. Я хотел поместить туда константу, и каждая из них является строкой, так что да :) Спасибо, что поймали это.   -  person chris    schedule 17.04.2012


Ответы (2)


Здесь проблема в приоритете оператора, попробуйте

_size += (*itr).size();

Или даже лучше,

_size += itr->size();
person Praetorian    schedule 17.04.2012

Вам не хватает скобок:

_size += (*itr).size();
_size += itr->size();

Должны оба работать.

person David    schedule 17.04.2012