ich mit einer C-Bibliothek in c zu arbeiten versuchen ++, die die Funktion hat:einen Datentyp für eine C-Bibliothek in C Casting ++
int MAG_robustReadMagModels(char *, MAGtype_MagneticModel *(*)[], int);
Aus dem Beispiel C-Code angegeben, ist die folgende, wie Sie das nennen würden Bibliothek:
char filename[] = "filename";
int epochs = 1;
MAGtype_MagneticModel * MagneticModels[1];
if(!MAG_robustReadMagModels(filename, &MagneticModels, epochs)) {
//ERROR
}
ich dies in C++ zu übersetzen versucht wie folgt:
char filename[8] = "filename";
int epochs = 1;
MAGtype_MagneticModel * MagneticModels[1];
if(!MAG_robustReadMagModels(filename, &MagneticModels, epochs)) {
//ERROR
}
das gibt mir die fol Muhen Fehler:
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
Wie würde ich C++ erhalten, um richtig dies für die C-Bibliothek neu zu interpretieren, die sie anrufen wird? Als Referenz bin versucht die Bibliothek I arbeiten können http://www.ngdc.noaa.gov/geomag/WMM/soft.shtml unter dem Link WMM2015_Windows.zip wird verursacht
Ein Parameter vom Typ 'foo * (*) []' ist gleich 'foo ***'. Der Autor wollte wahrscheinlich nicht wie ein Dreifachstern-Programmierer aussehen. – fuz
Diese beiden Codeabschnitte scheinen identisch zu sein, abgesehen von der Größe des Zeichenarrays im zweiten Beispiel – Tibrogargan
@Tribargargan Der Code ist derselbe. Der Unterschied besteht darin, dass der erste Codecode C-Code ist, der in C kompiliert. Der zweite Code versucht jedoch, denselben Code in C++ auszuführen, wo er fehlschlägt. – user3830784