gpt4 book ai didi

c++ - C 到 C++ 指针数组的转换问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:04 26 4
gpt4 key购买 nike

我有一个函数定义如下的库:

int MAG_robustReadMagModels(char *filename, MAGtype_MagneticModel *(*magneticmodels)[], int array_size)

该库是用 C 语言编写的。我正尝试像这样在 C++ 中使用它:

MAGtype_MagneticModel* Models[1];
MAG_robustReadMagModels(filePathNative, &Models, 1);

这是示例程序中使用的方式。但是我收到了消息

Error   C2664   'int MAG_robustReadMagModels(char *,MAGtype_MagneticModel *(*)[],int)': cannot convert argument 2 from 'MAGtype_MagneticModel *(*)[1]' to 'MAGtype_MagneticModel *(*)[]'    

无论是在我尝试编译它时还是在代码运行期间。

此外,我无法动态分配一个未调整大小的数组或将双指针转换为所需类型的 *(*)[] 我猜这是 C 语言之间的不兼容和 C++。我该如何解决这个问题?

最佳答案

我希望某些编译器对此会或多或少地严格。

我发现的最简单的事情就是使用 C 风格的转换。

以下是使用 Visual Studio 2005 为我编译的。

MAG_robustReadMagModels(filePathNative, (MAGtype_MagneticModel *(*)[]) &Models, 1);

当我删除 C 风格转换并只使用 &Models 时,我得到一个编译器错误:

error C2664: 'MAG_robustReadMagModels' : cannot convert parameter 2 from 'MAGtype_MagneticModel *(*__w64 )[1]' to 'MAGtype_MagneticModel *(*)[]'

另见 stackoverflow discussion on C style cast .

stackoverflow discussion on Performance hit from C++ style casts比较和对比 C++ 风格的转换与 C 风格的转换。

还有这个stackoverflow discussion on Is it possible to completely avoid C-style casts in C++关于差异有一些有趣的观点。

关于c++ - C 到 C++ 指针数组的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30470866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com