我有以下数据容器:
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()()的值,所以我可以在单元测试中检查它。
答案 0 :(得分:2)
由于成员变量data
和value
被声明为常量,因此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>
。