2012-07-23 65 views
0

“的类型的引用无效初始化”我有容器在我的课是这样的:另一个错误

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;} 

但&和常量Nope.Gives error:

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

读取错误消息!在'const'方法中,'this'指针和成员被视为'const',你不能将一个非'constst'引用返回给'const'对象。 – DCoder 2012-07-23 09:42:23

回答

6

这不起作用,因为const方法的所有成员(除了mutable应看起来好像是const本身

这意味着您不仅可以从该方法修改它们,还可以不指向非const的指针或形成对非const的引用。

因此,使用方法:

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

最后一个应写为

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