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>,但我认为它已经包含在内了。)