在C ++中为C库强制转换数据类型

用户名

我正在尝试使用具有以下功能的c ++中的C库:

int MAG_robustReadMagModels(char *, MAGtype_MagneticModel *(*)[], int);

从给出的示例C代码中,以下是调用该库的方式:

char filename[] = "filename";
int epochs = 1;
MAGtype_MagneticModel * MagneticModels[1];
if(!MAG_robustReadMagModels(filename, &MagneticModels, epochs)) {
    //ERROR
}

我试图将其转换为c ++,如下所示:

char filename[8] = "filename";
int epochs = 1;
MAGtype_MagneticModel * MagneticModels[1];
if(!MAG_robustReadMagModels(filename, &MagneticModels, epochs)) {
    //ERROR
}

这给了我以下错误:

error: C2664: 'int MAG_robustReadMagModels(char *,MAGtype_MagneticModel *(*)[],int)' 
: cannot convert argument 2 from 'MAGtype_MagneticModel *(*)[1]' to 'MAGtype_MagneticModel *(*)[]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

我如何才能使c ++对其所调用的c库正确地重新解释呢?作为参考,可以在http://www.ngdc.noaa.gov/geomag/WMM/soft.shtml下的标记为WMM2015_Windows.zip的链接下找到我尝试使用的库。

Tibrogargan

导致此错误的原因type[x]是,编译器将具有已知大小()的数组与具有未知大小(type[]的数组区别对待避免此问题的一种方法是创建一个大小未知(就编译器而言)的数组,以将其传递给函数:

char filename[] = "filename";
int epochs = 1;
void *foo = malloc(sizeof(MAGtype_MagneticModel *));
if (foo) {
    MAGtype_MagneticModel* *magnetic_models = (MAGtype_MagneticModel **)foo;
    if(!MAG_robustReadMagModels(filename, (MAGtype_MagneticModel* (*)[]) &magnetic_models, epochs)) {
        //ERROR
    } else {
        // do something with the new magnetic_model;
    }
    free(foo);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在目标 c 中强制强制转换和转换数据类型

来自分类Dev

C ++数据类型转换

来自分类Dev

C#中数据类型简短的转换错误

来自分类Dev

C ++中的类到类数据类型转换

来自分类Dev

从C#中的继承类转换数据类型

来自分类Dev

C#中的数据类型转换错误

来自分类Dev

转换数据类型C#

来自分类Dev

从nvarchar数据类型到datetime数据类型的转换导致C#中的值超出范围

来自分类Dev

将 varchar 数据类型转换为 datetime 数据类型导致 c# 中的值超出范围

来自分类Dev

在C库中强制转换malloc的结果

来自分类Dev

C中的数据类型提升或降级

来自分类Dev

在C(GCC)中定义数据类型

来自分类Dev

C中参数的默认数据类型?

来自分类Dev

c中的unsigned int数据类型

来自分类Dev

C ++中的符号数据类型

来自分类Dev

如何检查C ++中的数据类型?

来自分类Dev

在C中扫描不同的数据类型

来自分类Dev

C中的数据类型混合

来自分类Dev

在C(GCC)中定义数据类型

来自分类Dev

C中的数据类型提升或降级

来自分类Dev

C ++中的符号数据类型

来自分类Dev

Java中的C数据类型

来自分类Dev

使用结构化数据类型中的过程作为C库的回调(GTK + 3)

来自分类Dev

将日期数据类型从SQL Server转换为C#中的ToShortDateString

来自分类Dev

如何在c#中动态地将值转换为数据类型?

来自分类Dev

读取 MySQL JSON 数据类型并将其转换为 C# 中的 List<Int>

来自分类Dev

MyBatis Generator 1.3.7 为 Oracle 数据库 12c 生成实体数据类型错误

来自分类Dev

C:数据类型和使用printf()的转换

来自分类Dev

将C数据类型转换为Python