constメンバ関数内でのmapについて
例えば
#include <iostream> #include <map> using namespace std; class CClass{ public: int Getmap(int i)const; private: map<int,int> m_mapTest; }; int CClass::GetMap(int i)const{ return m_mapTest[i]; }
をすると return m_mapTest[i];の行でC2678のエラーが出る。
左オペランドが定義されていない、とでる。mapのヘッダファイルを見てみるとoperator[]は
reference operator[](cons key_type &K);
しか定義されていない!
途方にくれていたところふとfind()という関数が
iterator find(const key_type &k); const_iterator find(const key_type &k)const;
と定義されているじゃないですか!!!
というわけで
int CClass:GetMap(int i)const{ return m_mapTest.find(i)->second; }
としてやると無事コンパイルが通った!
裏技みたいだけどまあいいのかな?かな?
とりあえずなんで
const reference operator[](const key_type &k)const;
が定義されていないのか半ば疑問。const referenceみたいな書き方がC++は定義されていないのかしら?ご存じのかたは教えていただけると勉強になります。