Frage

Ich habe eine Klasse namens Optionen in C ++ geschrieben, hier sind die Header-Informationen:

class Options {
public:
string filename;
string chunkDir;
string outFilename;
string inFilename;
BOOL   compress;
BOOL   extract;
BOOL   print;
BOOL   reconstruct;
int    bits;

Options(string inFilename);
Options(int argc, char** argv);
void unsupported(string s);
void setOptionsFromArguments(int argc, char** argv);
void validateOptionCombination();
int getBits() {
    return bits
};

};

In der Objective-C Abschnitt I initialisieren Optionen wie folgt aus:

Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);

Nun, was passiert, ist, dass, wenn ich übergeben Sie den Zeiger auf einen anderen C ++ Methode es funktioniert gut, aber wenn ich versuche tatsächlich den Zugriff auf alles, was in der objektiven c Seite, beispielsweise

opts-> Bits oder opts-> GetBITS ()

Es gibt immer den Integer-Wert für den Druck

Es sieht aus wie irgendwie die Symboltabelle zwischen der Objective-C und C ++ Seite verstümmelt wird immer, aber ich habe keine Ahnung, was ich Ursache, dies zu tun hätte tun können.

Der Code funktioniert auch mit Objective-C ++, wenn ich für den Mac kompilieren, und so lange, wie C ++ ruft C ++ es scheint zu funktionieren, so ist es nicht wie der Speicher beschädigt ist immer, es sieht aus wie eine Symboltabelle Ausgabe.

Jeder Einblick sehr geschätzt würde.

War es hilfreich?

Lösung

In Objective-C ist BOOL ein typedef zu signed char. Was Definition verwenden Sie, wenn reines C ++ kompiliert? Wenn es anders ist, finden Sie alle Arten von Seltsamkeit bekommen, weil der C ++ Code und die Objective-C ++ Code wird nicht auf die Größe oder das Layout der Mitgliedsvariablen übereinstimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top