我班上有这样的容器:
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
为什么我得到这个以及如何解决呢
谢谢
答案 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;}