在C++中为C库强制转换数据类型
Casting a datatype for a C library in 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 的链接下
此错误是因为编译器对已知大小(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);
}
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- Static_cast转换为错误的数据类型,但结果仍然正确?
- 如何使用 dart:ffi 将 Uint8List 转换为 C 等效数据类型
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- C++将 wwn 字符串转换为识别为十六进制的数据类型
- 从 cpp lib 调用函数时的数据类型转换
- 如何将PyObjects转换为C数据类型
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- pybind11:Python 到 C++ 数据类型转换不起作用
- 尝试执行绕道附加,但无法将我的lua函数的数据类型转换为LPVOID
- 使用正确的数据类型转换java中的c++方法逻辑
- 数据类型在 CPP 中将 int 转换为双倍
- 将数据类型从C#封送至C++的类型转换问题
- 数据类型(从 malloc 返回)是如何转换的?
- XLL由XLW制造,BOOST UBLAS MyMatrix数据类型转换为双**失败
- 在C++中为C库强制转换数据类型
- 在C++中,关于位移和强制转换数据类型