gpt4 book ai didi

c++ - 编译器说对象是常量,我看不出如何

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:37 24 4
gpt4 key购买 nike

我在使用这段代码时遇到了问题:

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 += ...我收到此编译器错误:

error: passing ‘const NonCommutativeMonomial’ as ‘this’ argument of ‘NonCommutativeMonomial NonCommutativeMonomial::differential_at_wrt_variable(std::map&, VarId&) [with SR = LossySemiring]’ discards qualifiers [-fpermissive]

现在我意识到这意味着我在一个常量对象上调用一个方法(函数?),该方法不保证它不会修改该对象。我不明白的是如何monomial.first当我没有在任何地方声明它时可以保持不变。知道我可能做错了什么吗?

编辑:请参阅下面的答案为什么 monomial.first是常数。我需要它的一个非常量拷贝,类 NonCommutativeMonomial<SR>有这个复制构造函数:

NonCommutativeMonomial(const NonCommutativeMonomial &m) = default;

但是,当我调用它时使用

NonCommutativeMonomial * mono = new NonCommutativeMonomial<SR>(monomial.first);

并与 mono 一起工作之后,我仍然得到同样的错误。

最佳答案

在 std::map 中,键是常量对象,您永远不能更改它们。

编辑:

我建议进行以下更改:

NonCommutativePolynomial<SR> result;

for(auto &monomial : monomials_) {
NonCommutativePolynomial<SR> tmp(monomial.first);
result += tmp.differential_at_wrt_variable(valuation, variable)
* monomial.second;
}

关于c++ - 编译器说对象是常量,我看不出如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com