错误:初始化时无法将“ std :: complex <double>”转换为“ __complex__ float”

时间:2019-12-09 15:53:02

标签: c++

我一直在标题中看到错误消息。我拥有的C ++代码将在C ++ 98中运行,但不会在以后需要使用的任何后续C ++版本(如11或14等)中运行。

有什么想法吗?

    extern _Complex float gRESAMPLE_DSSS_PAGEDCOEFS_REVERSE_CONJ_TAPS17_STEP5000KHZ_BW20MHZ_FS20MHZ[];

_Complex float gRESAMPLE_DSSS_PAGEDCOEFS_REVERSE_CONJ_TAPS17_STEP5000KHZ_BW20MHZ_FS20MHZ[187] =
{
+1.91232115e-02-0.00000000e+00i, +2.05319226e-02-0.00000000e+00i, -2.72482540e-02-0.00000000e+00i, +4.17710021e-02-0.00000000e+00i,
-6.60308301e-02-0.00000000e+00i, +1.07876487e-01-0.00000000e+00i, -1.98891580e-01-0.00000000e+00i, +6.31532013e-01-0.00000000e+00i,
+6.31532013e-01-0.00000000e+00i, -1.98891580e-01-0.00000000e+00i, +1.07876487e-01-0.00000000e+00i, -6.60308301e-02-0.00000000e+00i,
+4.17710021e-02-0.00000000e+00i, -2.72482540e-02-0.00000000e+00i, +2.05319226e-02-0.00000000e+00i, +1.91232115e-02-0.00000000e+00i,
-2.01950068e-04-0.00000000e+00i, +1.57716405e-02-0.00000000e+00i, +2.58155894e-02-0.00000000e+00i, -3.05156335e-02-0.00000000e+00i,
+4.43429612e-02-0.00000000e+00i, -6.73551857e-02-0.00000000e+00i, +1.05998978e-01-0.00000000e+00i, -1.86539873e-01-0.00000000e+00i,
+5.19834042e-01-0.00000000e+00i, +7.33756542e-01-0.00000000e+00i, -1.96507320e-01-0.00000000e+00i, +1.01235323e-01-0.00000000e+00i,
-5.93557656e-02-0.00000000e+00i, +3.57483588e-02-0.00000000e+00i, -2.17679292e-02-0.00000000e+00i, +1.41898394e-02-0.00000000e+00i,
+2.25500409e-02-0.00000000e+00i, +4.04566905e-04-0.00000000e+00i, +1.26300994e-02-0.00000000e+00i, +2.98684780e-02-0.00000000e+00i,
-3.14745754e-02-0.00000000e+00i, +4.35172319e-02-0.00000000e+00i, -6.36360645e-02-0.00000000e+00i, +9.64822844e-02-0.00000000e+00i,
};

实际上,复杂矩阵的大小实际上是187大。...我只是出于房间考虑而不粘贴它。

谢谢

标记

2 个答案:

答案 0 :(得分:4)

_Complex float是C的复数形式,在C ++中不应该存在。您的编译器允许它作为扩展。

1.23i是C ++ std::complex文字。

_Complexstd::complex彼此不兼容。您应该使用其中一个。

在代码中的各处将_Complex float替换为std::complex<float>,并将1.23i文字(类型为std::complex<double>)更改为1.23ifstd::complex<float>

或者,将1.23i文字替换为1.23*IIcomplex.h中定义)。

答案 1 :(得分:0)

C ++ 14引入了""_i complex literal for doubles,这就是为什么您收到此错误的原因。

std::complex<float>_Complex float在布局上兼容的C ++标准guarantees。 但是,使用i意味着您有一个std::complex<double>[],它与_Complex float不兼容。

如果使用后缀if代替i,则可以将数组定义为std::complex<float>,与_Complex float相同。