在STL映射上使用迭代器时收到错误消息

时间:2013-08-01 02:02:37

标签: c++ stl

我正在尝试打印地图元素,但每次将迭代器分配给地图时,我都会收到错误消息。错误消息太长而且不可读..请帮助:p

//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 个答案:

答案 0 :(得分: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