0

次のコードがあります。

std::map<size_t,Cell&> m_cellMap;

Cell が次のように定義されている場合:

class Cell
    {
      public:
        Cell(int x = 0,int y = 0) : m_x(x),m_y(y) { }
      private:
        int m_x;
        int m_y;
        /// class members and methods
    };

以下のコードをコンパイルできません:

Cell c;
m_cellMap[0] = c;

エラーの取得:error C2101: '&' on constant 何が問題なのですか?どうすれば修正できますか?

ありがとう

4

3 に答える 3

9

標準コンテナに参照を保持することはできません。代わりにポインタを使用してください。

std::map<size_t,Cell*> m_cellMap;

Cell c;
m_cellMap[0] = &c;
于 2013-03-12T21:00:30.590 に答える
6

std::mapto 参照を作成することはできません。std::map参照には、マップ先の値に必要なプロパティがありません。

を作成してみてくださいstd::map<size_t, Cell*>m_cellMap[0] = &c;

于 2013-03-12T21:00:30.163 に答える
0

生のポインターを扱いたくない場合 (そして本当にしたくない場合) は、std::reference_wrapper代わりに を使用できます。

std::map<size_t,std::reference_wrapper<Cell>> m_cellMap;

その場合は、[]演算子の使用を避ける必要があります。

マップに挿入するには、次の手順を実行します。

m_cellMap.insert(std::make_pair(0, c));

参照の代わりにポインターを使用する場合は、Cell作成するオブジェクトの有効期間を管理する必要があります。

于 2013-03-12T21:14:59.540 に答える