У меня есть библиотека, которая определяет функцию следующим образом:C на C++ Массив вопроса преобразования указателей
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++. Как мне обойти это?
Попробуйте использовать 'reinterpret_cast <>()', это устранит ошибку. Следовательно, это будет теперь 'MAG_robustReadMagModels (filePathNative, reinterpret_cast (& Models), 1);' –
В этом потоке stackoverflow обсуждаются различия между reinterpret_cast <> и static_cast <> http://stackoverflow.com/ вопросы/573294/when-to-use-reinterpret-cast, как и этот stackoverflow http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-const-cast-and-reinterpret-cast -be-used –