9

constに問題があります。私が持っていると言う:

class A{
    friend std::ostream& operator<<(std::ostream& os,const A& myObj);

   private:
    std::map<int,int> someMap;
    int someInteger;
 };
 std::ostream& operator<<(std::ostream& os,const A& myObj){
  os<<myObj.someInteger<<std::endl;
  os<<myObj.someMap[0]<<std::endl;
  }

この種のコードは、マップとのconstの競合が原因でコンパイル時にエラーを生成し(マップ値を出力する行にコメントを付けると、すべて問題ありません)、関数プロトタイプの「const」を削除すると、すべて問題ありません。どこに問題があるのか​​本当にわかりません。

何か助けてください?

4

1 に答える 1

30

std::map::operator[]要素がまだ存在しない場合は要素を挿入するため、constではありません。std::map::at()c ++ 11では、代わりに次を使用できます。

myObj.someMap.at(0)

それ以外の場合は、を使用して要素が最初に存在するかどうかを確認できますstd::map::find

if (myObj.find(0) != myObj.end())
{
  // element with key 0 exists in map
} else 
{
  // do something else.
}
于 2012-12-20T18:24:11.007 に答える