另一个“无效初始化类型的引用”错误

时间:2012-07-23 09:39:00

标签: c++ reference const

我班上有这样的容器:

protected:
std::map<const AAA*, std::set<BBB*> > conn;

以下两个getter函数都可以正常工作:

std::map<const AAA*, std::set<BBB*> > & getConnectors()       {return connectors;}
std::map<const AAA*, std::set<BBB*> >   getConnectors() const {return connectors;}

但&amp;和const一起,Nope。给出错误:

std::map<const AAA*, std::set<BBB*> > & getConnectors() const {return connectors;} //error

错误是:

/home.../Multi.hpp:65:108: error: invalid initialization of reference of type ‘std::map<const AAA*, std::set<BBB*> >&’ from expression of type ‘const std::map<const AAA*, std::set<BBB*> >’
make[2]: *** [CMakeFiles/SimMobility.dir/main.cpp.o] Error 1

为什么我得到这个以及如何解决呢

谢谢

2 个答案:

答案 0 :(得分:6)

这不起作用,因为来自const方法的所有成员(除了mutable应该被视为const他们自己

这意味着你不仅不能从该方法修改它们,而且你也不能用指向非const的指针指向它们或形成对非const的引用。

因此,请使用:

      std::map<Foo, Bar> & GetConnectors();
const std::map<Foo, Bar> & GetConnectors() const;

答案 1 :(得分:1)

最后一个应该写成

const std::map<const AAA*, std::set<BBB*> > & getConnectors() const {return connectors;}