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)
为什么我得到这个,请问我怎么解决呢
谢谢
这不起作用,因为从一个const方法来看,所有成员(除此之外mutable)应该被视为他们const自己.
这意味着你不仅不能从该方法修改它们,而且你也不能用指向非const的指针指向它们或者形成对非const的引用.
因此,使用:
std::map<Foo, Bar> & GetConnectors();
const std::map<Foo, Bar> & GetConnectors() const;
Run Code Online (Sandbox Code Playgroud)