我有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();
}
答案 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();
。