一个在github上下的C语言程序,在matlab用MEX编译时出错,
报错:C2143: 语法错误: 缺 少“;”(在“*”的前面) C2059: 语法错误
typedef struct
{
size_t sz;
size_t nele;
float complex *arr;
} VarCFloatComplexArray;
解决:提问后https://ask.csdn.net/questions/7410767,根据提示,看complex.h文件把问题中的float complex改为_C_float_complex
报错:error C2440: “函数”: 无法从“_C_float_complex”转换为“_Dcomplex”
_C_float_complex p;
/* Get a point. This fails only if there are no more points */
if (popRandomQueue(&proclist, &p, &ran_seed) == FAILURE) break;
pW = creal(p);
pH = cimag(p);
查看complex.h,首先 _Dcomplex就是 _C_double_complex
而double和float的运算符有点区别:
_ACRTIMP double __cdecl creal(_In_ _Dcomplex _Z);
_ACRTIMP float __cdecl crealf(_In_ _Fcomplex _Z);
解决:把creal改为crealf,cimag改为cimagf
报错:error C2088: “*”: 对于struct 非法
r_grid[idx] = rgridR + rgridI*I;
其中r_grid是_C_double_complex,rgridR和rgridI分别表示实部和虚部的值,都为float类型。I在complex.h中定义如下:
#define _DCOMPLEX_(re, im) _Cbuild(re, im)
#define _FCOMPLEX_(re, im) _FCbuild(re, im)
#define _LCOMPLEX_(re, im) _LCbuild(re, im)
#define _Complex_I _FCbuild(0.0F, 1.0F)
#define I _Complex_I
解决方式参照:https://stackoverflow.com/questions/62156379/complex-and-double-complex-methods-not-working-in-visual-studio-c-project?r=SearchResults
一个目前没报错但不知是否符合意义的解决方式:
根据_C_double_complex声明:
typedef struct _C_float_complex
{
float _Val[2];
} _C_float_complex;
把代码改为:
//r_grid[idx] = rgridR + rgridI*I;
r_grid[idx]._Val[0]= rgridR;
r_grid[idx]._Val[1]= rgridI;
今天的文章C语言中complex.h的踩坑记录分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/26567.html