C++中复杂的<double> - 不能使用imag(),complex(),real()

mum*_*tei -1 c++ complex-numbers

我在使用complex.h中的函数时遇到问题.我有一些数字

typedef complex<double> cmplx;
cmplx N;
double x;
double y;
Run Code Online (Sandbox Code Playgroud)

现在我需要对它们进行操作:

double k = real(N);
cmplx NI = complex(x,y);
double l = imag(N);
Run Code Online (Sandbox Code Playgroud)

这些作品都没有.怎么了?我曾尝试写creal,cimag,但没有任何作用......编译器写道:

error: argument list for class template "std::complex" is missing
Run Code Online (Sandbox Code Playgroud)

请帮忙

谢谢


编辑

再次感谢您的帮助,但现在我遇到了一个新问题.如果我有一个cmplx数字的数组Arr [N],现在我需要Arr [i]的真实部分我写了

realArray[5] = ComplexArray[5].real();
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

error: expression must have class type
Run Code Online (Sandbox Code Playgroud)

real()或imag()函数的错误是相同的

Mik*_*our 6

使用complex.h中的函数时遇到问题

没有带有该名称的标准标题.我猜你的意思<complex>; 否则,您要么包含史前或非标准库,要么包含C库.无论如何,你应该改为<complex>.

第一行和第三行应该没问题.real并且imag被定义为在您使用它们时可用的非成员函数,或者作为可用作N.real()和的成员函数N.imag().

第二行应该是以下之一:

cmplx NI = cmplx(x,y);
cmplx NI = complex<double>(x,y);
cmplx NI(x,y);
Run Code Online (Sandbox Code Playgroud)

使用您的类型别名cmplx或模板特化本身来指定类型.如错误所示,您无法在需要类型的地方使用模板.