1

我有以下数据容器:

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()() 的值,以便在单元测试中检查它。

4

2 回答 2

2

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

这应该工作:

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

    std::unique_ptr< Node > node;
};
于 2012-10-18T09:26:38.250 回答
0

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

于 2012-10-18T09:23:36.183 回答