使用const成员将对象复制到非const对象

时间:2012-10-18 09:20:15

标签: c++

我有以下数据容器:

struct Node
{
    explicit Node(const std::vector<Data>& _data, const Value& _value): data(_data), value(_value)
    {
    }

    const std::vector<Data> data;
    const Value value;
};

我希望按照这些方式写一个模拟:

class MockVisitor: public IVisitor
{
public:
    virtual void operator()(const Node& _node)
    {
        node = _node;
    }

    Node node;
};

但是,我收到了错误:

error C2582: 'operator =' function is unavailable in 'Node'. 

我认为这是因为我只能分配给一个const节点。反正我是否抛弃了这个错误?记住这只是一个模拟类。我只是想记录传递给operator()()的值,所以我可以在单元测试中检查它。

2 个答案:

答案 0 :(得分:2)

由于成员变量datavalue被声明为常量,因此operator=被删除。这就是你不能使用它的原因,因此编译错误。

这应该有效:

class MockVisitor: public IVisitor
{
public:
    virtual void operator()(const Node& _node)
    {
        node.reset( new Node( _node ) );
    }

    std::unique_ptr< Node > node;
};

答案 1 :(得分:0)

您的Node类是不可变的。执行此操作没有任何意义,因为您正在尝试更改MockVisitor中已有的节点的值。如果您想这样做,请考虑boost::optional<Node>