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::map对引用进行引用。引用不具有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 回答