为什么`ccos`,`csqrt`,`cpow`无法识别?

时间:2016-08-02 21:25:56

标签: c++ header-files complex-numbers

为什么我会收到这些错误? (我有一个error: use of undeclared identifier 'ccos' error: use of undeclared identifier 'csqrt'; did you mean 'sqrt'? error: use of undeclared identifier 'cpow'; did you mean 'pow'? 编译器。)

#include <complex>

double ghmc1AccNormalised( double ph, double r, double t, double th){

    complex<double> numerator;
    complex<double> denominator;
    double E = exp(1);


    numerator=-(cpow(E,t*((-2*r + r*ccos(th) + r* // ... etc
        // what follows is 24MB of a horrible polynomial from Mathematica
        ...
    denominator = cpow(2,0.3333333333333333) //... etc

return creal(numerator/denominator);
}

等等。我已将我的功能声明为:

inf

我正在努力确保我正确处理虚构变量。 我花了很长时间看各种帖子,但我有以下问题:

  • 价值以nanccos显示,当时他们不应该
  • 我怀疑这是因为复杂的数字没有得到妥善处理
  • This highly rated post注意csqrtusing complex;等应该用于复杂的论点
  • 除了上面的内容,我还尝试了各种命名空间:
    • using std::complex;
    • std::complex
    • 我还尝试将complex::c/c++添加到每个功能

免责声明这是我的第一个appraisal_abstract_subdv.columns.values 函数,所以请忽略琐碎的问题,除非与问题直接相关

1 个答案:

答案 0 :(得分:3)

您正在使用C标头complex.h中的功能,您不包括这些功能。但C++ header complexcossinpow * 提供了重载。你应该使用它们而不是它们的C对应物。

#include <complex>

int main()
{
    std::complex<double> c{1, 2};
    auto c2 = pow(c, 2);
    auto cc = sqrt(c2);
}

*请注意,它们位于std命名空间中,但std::complex也是如此,因此参数依赖查找(ADL)允许您在没有命名空间的情况下调用它们。 < / p>