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 に答える