这个Clark代码为什么在VS2013中用不了?

头文件Clarke.h如下:

源文件Clarke.c如下:


当我把这些代码复制到VS2013中时,如下:

但此时,会报错,如下:


报错的意思,我理解的是,typedef struct 中定义的 CLARKE 结构体,里面的void(*calc)() , 函数指针,是没有参数的,但是用CLARKE_DEFAULTS,去初始化的时候,里面的函数clarke_calc( ),它是有参数值的,所以不能这么初始化。

于是,我把 CLARKE 这个结构体, 改成如下:


也就是,将其中的函数指针,指定了变量类型,但此时依旧报错,并且错误如下:


请问这是怎么回事啊?


推荐  (0) | 2人关注关注
1个答案
0 0

因为你在用C++编译器编译C代码。

C++在绝大多数情况下是兼容C的,但这段代码正好遇到了一个例外。C语言允许这样的类型转换,而C++不允许。如果要在C++编译器中编译这段代码,第一个typedef要写成这样:

typedef struct CLARKE {

float32 As;

float32 Bs;

float32 Cs;

float32 Alpha;

float32 Beta;

void (*calc)(struct CLARKE*);

} CLARKE;

至于你后面修改的代码,问题在于你在定义CLARKE_handle之前就使用了它。

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区