我有一个在 C++11 中使用的复杂 float 组:
std::complex<float> *cx;
我正在尝试使用一个较旧的库,它接受 C 风格的复杂 float :
float complex *cx;
当我尝试这个时:
std::complex<float> *cpp = new std::complex<float>[100];
complex float *c = reinterpret_cast<complex float*>(cpp);
c_process(c); // c_process(complex float *c) [ c library function ]
我得到:
error: expected ';' before 'float'
complex float *c = reinterpret_cast<complex float*>(cpp);
^
问题在于 C 库的 header 包含 #include <complex.h>
,我有#include <complex>
在我使用 std::complex 的 C++11 代码中。
class complex
来自<complex>
和#define complex _Complex
来自<complex.h>
似乎与complex
这个词发生冲突.
一个解决方案: 只有当您可以修改其他库的 header 时,此解决方案才有效。
由于这个问题的权力已经关闭(尽管我认为这是一个相当好的),这就是我所做的:
自 <complex.h>
有一个#define complex _Complex
和<complex>
包含 class complex
,包含两个 header 时存在一些冲突。
我必须更改所有float complex*
至float _Complex*
我的代码和其他库的头文件中到处都是。这消除了单词 complex
上的冲突。来自 cstyle
最佳答案
这种不兼容性仅是语法上的,两种语言都保证其复杂类型与 float[2]
(或 double[2]
等)具有相同的布局。因此,您可以通过根据扩展语言定义的宏 cfloat
在两者之间进行调解。类似的东西
#ifdef __cplusplus
typedef std::complex<float> cfloat;
#else
typedef float _Complex cfloat;
#endif
然后在所有函数原型(prototype)中使用这个 cfloat
。
关于C++11 复杂<浮点>* 到 C 浮点复杂*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955093/