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

时间:2013-09-17 13:52:24

标签: c++ complex-numbers

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

typedef complex<double> cmplx;
cmplx N;
double x;
double y;

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

double k = real(N);
cmplx NI = complex(x,y);
double l = imag(N);
这些作品中没有任何内容。怎么了?我曾尝试写过creal,cimag,但没有任何作用......编译器写道:

error: argument list for class template "std::complex" is missing

请求你的帮助

由于


修改

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

realArray[5] = ComplexArray[5].real();

我收到错误:

error: expression must have class type

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

2 个答案:

答案 0 :(得分:6)

  

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

没有带有该名称的标准标题。我假设你的意思是<complex>;否则,您包括史前或非标准库或C库。无论如何,您应该更改为<complex>

第一行和第三行应该没问题。 realimag既定义为可在您使用时使用的非成员函数,也可定义为可用作N.real()N.imag()的成员函数。

第二行应该是以下之一:

cmplx NI = cmplx(x,y);
cmplx NI = complex<double>(x,y);
cmplx NI(x,y);

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

答案 1 :(得分:1)

你想要这样的东西:

double k = N.real();
cmplx NI = cmplx(x,y);
double l = N.imag();