2014-12-20 2 views
-3

Декларация работает, когда я объявляю итератор так:Ошибка в описании итератора в STL карте

map<string,int>::iterator it, temp; 

Но что происходит, когда я объявляю это следующим образом?

map<string,int>temp, ::iterator it; 

Это показывает error: expected initializer before 'it'

Почему это вызывает ошибку?

+4

Потому что это недопустимо C++. Вы не можете просто писать, как хотите, вы должны следовать правилам языка. –

+0

Разве обе декларации не похожи? –

+0

Почему это так? Вопрос нелогичен? –

ответ

1

iterator является членом типа внутри std::map контейнера, для того чтобы иметь переменную этого типа, вам необходимо использовать соответствующий синтаксис, map<string,int>temp, ::iterator it; просто ошибается, как жалуется компилятор.

map<string,int>::iterator представляет собой тип, ::iterator плохо сформирован.

+0

Получил это. Спасибо :) –

+0

Я не знал, что карта :: итератор типа :( –

+0

@AliAkber Его хорошо, теперь вы знаете, что это – P0W

1

В первом случае вы создаете два итератора для stl-карты. Во втором случае вы создаете stl-карты, а C++ не ожидает пробела в идентификаторе, а идентификатор не должен начинаться с символа «:» (правила C++ lang).

+0

Спасибо :) Я не знал о факте –

Смежные вопросы