C ++复数项多项式函数评估失败

时间:2016-06-19 21:09:45

标签: c++

我正在尝试实现一个简单的Durand-Kerner根查找算法,但在尝试编译代码时遇到错误。这就是我到目前为止所做的:

#include <iostream>
#include <string>   // std::stod
#include <complex>

typedef std::complex<double> cplx;

// f(x)
/************************************************/
/// This function doesn't want to be compiled, but
/// it's implemented the same way as the one below
/*************************************************/
cplx f(cplx &coeff, cplx &term, int length)
{
    cplx sum {0., 0.};
    for (int k=0; k<length; ++k)
    {
        sum += coeff[k] * pow(term[k], length - 1 - k);
    }
    return sum;
}

int main(int argc, char *argv[])
{
    cplx *terms {new cplx[argc-1]};
    cplx *initial {new cplx[argc-1]};

    // Convert command-line chars to numbers
    for (int k=1; k<argc; ++k)
        terms[k-1] = std::stod(argv[k]);

    // Initialize the seed roots
    for (int k=0; k<argc-1; ++k)
        initial[k] = pow(cplx(0.4, 0.9), k);

    /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    /*********************************************************/
    /// This one is the same as f(x) above, but this one works
    /*********************************************************/
    cplx s {0., 0.};
    for (int k=0; k<argc-1; ++k)
        s += terms[k] * pow(initial[k], argc - 2 - k);
    std::cout << s << "\n";

    return 0;
}

在尝试实现多项式f(x)(第一个函数)的求值时,我不断得到这个错误:“〜/ Documents / cpp / Durand-Kerner / main.cpp | 13 |错误:不匹配'operator []'(操作数类型是'cplx {aka std :: complex}'和'int')|“。

虽然错误很明显,但我不明白为什么,因为在注释“~~~”行下面实现的函数f(x)有效。如果我注释掉f(x)函数,我可以编译,但不能使用函数吗?

我看到两者之间没有什么不同,除了可能是“长度”与显式“argc”,但“长度”将作为“argc-1”传递给函数,所以我真的不明白为什么错误? (我目前正在学习C ++,如果这里很重要的话)

1 个答案:

答案 0 :(得分:2)

问题出现在这里:

sum += coeff[k] * pow(term[k], length - 1 - k);

但实际问题可能在您发送引用的函数的标题中(cplx&amp; coeff,cplx&amp; term),但您希望将它们用作数组或指针。解决办法可能就是这样:

// f(x)

cplx f(cplx *coeff, cplx *term, int length)
{
    cplx sum {0., 0.};
    for (int k=0; k<length; ++k)
    {
        sum += coeff[k] * pow(term[k], length - 1 - k);
    }
    return sum;
}

正如你所看到的,我已经从&amp;签到*。