2012-07-23 64 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;}