另一个"invalid initialization of reference of type"错误

Another "invalid initialization of reference of type" error

本文关键字:of type 错误 reference initialization invalid 另一个      更新时间:2023-10-16

我的类中有这样的容器:

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加在一起,没有。给出错误:

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

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

感谢

这不起作用,因为const方法来看,所有成员(除了mutable都应该被视为const本身

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

因此,使用:

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

最后一个应该写为

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