C++ - 我如何使用元组和 auto[value1, value2] return 2 个值,因为 c++ 说 value1 应该是常量?
C++ - How do I return 2 values using tuple and auto[value1, value2] as c++ says value1 should be const?
我正在用 C++ 编写 Polynom class。在下面的 link 中,解释了如何使用元组 return 多个值:Returning multiple values from a C++ function
所以我尝试按照 return 多项式除法的商和余数的指示进行编码,但它不起作用。
这是我的除法:
tuple<Polynome, Polynome> division(Polynome& D)
{
Polynome Q;
Polynome R(*this);
Polynome nul;
int delta(degre() - D.degre());
float a;
while (delta >= 0 && R != nul)
{
a = R.top() / D.top();
Polynome nouveauPoly(a, delta);
Q = Q + nouveauPoly;
R = R - nouveauPoly * D;
delta = R.degre() - D.degre();
}
return {Q, R};
}
然后,当我按照上面 link 中的说明开始编写我自己的运算符时:
Polynome operator/(Polynome& D)
{
auto [Q, R] = division(D);
}
我收到一条错误消息,告诉我 Q 应该是常数值。我不明白为什么 Q 应该是这样,错误从何而来,尤其是关于这段代码来自 Whosebug 中的最佳答案。我试图首先声明多项式 Q 和 R 但它没有改变任何东西。
最终我找到了一种使用元组实现我想要的方法,但我仍然想知道为什么指定的答案对我不起作用。
非常感谢
可能 Structured Binding 不适用于您的编译器版本(或 C++ 版本选项)。这需要 C++17。
如果你不能使用 C++17,你可能想尝试更老的方法来做到这一点:
而不是
auto [Q, R] = division(D);
使用
Polynome Q, R;
std::tie(Q, R) = division(D);
(这需要 #include <tuple>
,但我认为它已经包含在内了。)
我正在用 C++ 编写 Polynom class。在下面的 link 中,解释了如何使用元组 return 多个值:Returning multiple values from a C++ function
所以我尝试按照 return 多项式除法的商和余数的指示进行编码,但它不起作用。
这是我的除法:
tuple<Polynome, Polynome> division(Polynome& D)
{
Polynome Q;
Polynome R(*this);
Polynome nul;
int delta(degre() - D.degre());
float a;
while (delta >= 0 && R != nul)
{
a = R.top() / D.top();
Polynome nouveauPoly(a, delta);
Q = Q + nouveauPoly;
R = R - nouveauPoly * D;
delta = R.degre() - D.degre();
}
return {Q, R};
}
然后,当我按照上面 link 中的说明开始编写我自己的运算符时:
Polynome operator/(Polynome& D)
{
auto [Q, R] = division(D);
}
我收到一条错误消息,告诉我 Q 应该是常数值。我不明白为什么 Q 应该是这样,错误从何而来,尤其是关于这段代码来自 Whosebug 中的最佳答案。我试图首先声明多项式 Q 和 R 但它没有改变任何东西。
最终我找到了一种使用元组实现我想要的方法,但我仍然想知道为什么指定的答案对我不起作用。
非常感谢
可能 Structured Binding 不适用于您的编译器版本(或 C++ 版本选项)。这需要 C++17。
如果你不能使用 C++17,你可能想尝试更老的方法来做到这一点:
而不是
auto [Q, R] = division(D);
使用
Polynome Q, R;
std::tie(Q, R) = division(D);
(这需要 #include <tuple>
,但我认为它已经包含在内了。)