【问题标题】:Another "invalid initialization of reference of type" error另一个“类型引用的无效初始化”错误
【发布时间】:2012-07-23 09:38:59
【问题描述】:

我的班级中有这样的容器:

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

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

谢谢

【问题讨论】:

  • 阅读错误信息!在const 方法中,this 指针和成员被视为const,您不能返回对const 对象的非const 引用。

标签: c++ reference constants


【解决方案1】:

这不起作用,因为来自const 方法的所有成员(除了mutable应该被视为他们自己是const

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

因此,使用:

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

【讨论】:

    【解决方案2】:

    最后一个应该写成

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

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2023-03-06
      • 2013-09-04
      • 2012-12-18
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多