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

rah*_*man 0 c++ const reference

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

protected:
std::map<const AAA*, std::set<BBB*> > conn;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

错误是:

/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
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个,请问我怎么解决呢

谢谢

Kos*_*Kos 6

这不起作用,因为从一个const方法来看,所有成员(除此之外mutable)应该被视为他们const自己.

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

因此,使用:

      std::map<Foo, Bar> & GetConnectors();
const std::map<Foo, Bar> & GetConnectors() const;
Run Code Online (Sandbox Code Playgroud)