我在使用此代码时遇到问题:
NonCommutativePolynomial<SR> differential_at_wrt_variable
(std::map<VarId,SR> valuation, VarId variable) {
NonCommutativePolynomial<SR> result;
for(auto &monomial : monomials_) {
result += monomial.first.differential_at_wrt_variable(valuation, variable)
* monomial.second;
}
return result;
}
monomials_
有类型std::map<NonCommutativeMonomial<SR>,std::uint_fast16_t>
。
在result += ...
我收到此编译器错误的行中:
错误:将 'const NonCommutativeMonomial' 作为 'NonCommutativeMonomial NonCommutativeMonomial::differential_at_wrt_variable(std::map&, VarId&) [with SR = LossySemiring]' 的 'this' 参数传递,丢弃限定符 [-fpermissive]
现在我意识到这意味着我在一个常量对象上调用一个方法(函数?),该方法不能保证它不会修改该对象。我不明白的是,monomial.first
当我没有在任何地方宣布它是这样的时候,它怎么能保持不变。有什么想法我可能做错了吗?
编辑:请参阅下面的答案为什么monomial.first
是恒定的。我需要它的非常量副本,该类NonCommutativeMonomial<SR>
具有此复制构造函数:
NonCommutativeMonomial(const NonCommutativeMonomial &m) = default;
但是,当我使用
NonCommutativeMonomial * mono = new NonCommutativeMonomial<SR>(monomial.first);
并在mono
之后使用,我仍然遇到同样的错误。