2013-08-01 3 views
0

Я пытаюсь распечатать элементы карты, но каждый раз я получаю сообщение об ошибке, когда я назначаю итератор на карту. Сообщение об ошибке так долго и не readable..please помощь: рполучение сообщения об ошибке при использовании итератора на карте STL

//a.h 
#include<string> 
#include<map> 
class B; //forward declaration of class B 
class A 
{ 
    typedef std::map<std::string, B *> container; 
    private: 
    std::string name; 
    container Bs; 

    public: 
    void printAllBs() const; 

    typedef container::iterator set_itr_T; 
}; 

//a.cpp 
#include<a.h> 
#include<string> 
#include<map> 
#include<b.h> 
#include<iostream> 

void A::printAllBs() const 
{ 
    for(set_itr_T it = Bs.begin(); it!=Bs.end(); ++it) //error here 
    {} 
} 
+1

Нам все еще нужно сообщение об ошибке, вставьте его в свой вопрос. Это может быть не читаемо для вас, но это должно быть для других. – Borgleader

+0

Ваш итератор должен быть постоянным итератором: for (container :: const_iterator it = Bs.begin(); it! = Bs.end(); ++ it) // ошибка здесь – Cos314

+0

См. Ответ, который дал Ян ниже. У вас есть два варианта: используйте const_iterator, потому что вы объявляете метод как «const» или переопределяете метод без const и используете существующую реализацию as-is. – Cos314

ответ

3

Поскольку вы объявить функцию

void A::printAllBs() const 
{ 
    for(set_itr_T it = Bs.begin(); it!=Bs.end(); ++it) //error here 
    {} 
} 

в const, компилятор должен убедиться, что он ничего не меняет в container , Таким образом, it должен быть const_iterator от container. Вы должны использовать

for(container::const_iterator it = Bs.begin(); it!=Bs.end(); ++it) 

или удалить const из декларации метода.

+0

Вижу, большое вам спасибо! – user1701840

+0

@ user1701840 Рад помочь. – Yang

+0

Кстати, я сделал это при использовании Set, почему компилятор разрешил использовать set_itr_T? – user1701840

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