Iterator无匹配运算符=错误

时间:2011-07-19 08:12:27

标签: c++ iterator

我有2个类,即classA和classB。在classA中,有一个在堆内存上动态声明的映射。 但是在classB中,尝试使用迭代器访问classA映射值。 不幸的是我为迭代器得到了错误no match operator =。 如果我要将地图移动到classB,迭代器将正常工作。有人可以帮助我吗,它一直困扰着我。 提前谢谢。

class classA{
public:
  classA();
friend classB;
private:
  map <int,int>* _themap;
};

classA::classA(){
  _themap = new map<int,int>;
}

class classB{
private:
 classA* object = new classA();
 void accessthemap();
};

void classB::accessthemap(){

 map<int,int>::iterator it;
 it = object->_themap->begin();
 it = object->_themap->find();
}

2 个答案:

答案 0 :(得分:2)

应该是

it = object->_themap.begin(); //not _themap->begin()

由于_themap是非指针,因此您必须使用.运算符,而不是->运算符。

此外,还有更多错误。如果您已将classA写为

//incorrect
classA{
   //...
};

应该是

//correct
class classA{
   //...
};

也就是说,您必须在 class-name 之前使用关键字class。因此,使用关键字classB定义其他类,例如class

答案 1 :(得分:1)

您无法在类定义中定义成员,因此这是错误的:

classB{
private:
 classA* object = new classA();
 void accessthemap();
};

相反,只需使用普通对象(更不用说修复其他语法错误):

class classB {
private:
 classA object;
 void accessthemap();
};

此处无需动态分配。

然后写object._themap.begin();