0

私のクラスには次のようなコンテナがあります。

protected:
std::map<const AAA*, std::set<BBB*> > conn;

次のゲッター関数はどちらも問題なく機能します。

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

なぜこれを取得しているのか、どうすれば解決できますか?

ありがとうございました

4

2 に答える 2

6

メソッドからは、constすべてのメンバー(以外mutable)が自分自身であるかのように扱われる必要があるconstため、これは機能しません。

これは、そのメソッドからそれらを変更できないだけでなく、non-constへのポインターでそれらを指すことも、non-constへの参照を形成することもできないことを意味します。

したがって、以下を使用します。

      std::map<Foo, Bar> & GetConnectors();
const std::map<Foo, Bar> & GetConnectors() const;
于 2012-07-23T09:42:24.213 に答える
1

最後のものは次のように書く必要があります

const std::map<const AAA*, std::set<BBB*> > & getConnectors() const {return connectors;}
于 2012-07-23T09:43:50.227 に答える