我正在尝试实现一个简单的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 ++,如果这里很重要的话)
答案 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;签到*。