0

我的课堂上有这样的容器:

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;}

但是 & 和 const 一起,Nope.Gives 错误:

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

为什么我会得到这个,请问我该如何解决

谢谢你

4

2 回答 2

6

这不起作用,因为从一个const方法中,所有成员(除了mutable都应该被视为他们const自己

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

因此,使用:

      std::map<Foo, Bar> & GetConnectors();
const std::map<Foo, Bar> & GetConnectors() const;
于 2012-07-23T09:42:24.213 回答
1

最后一个应该写成

const std::map<const AAA*, std::set<BBB*> > & getConnectors() const {return connectors;}
于 2012-07-23T09:43:50.227 回答