table des symboles mutilée en Objective-C lors de la liaison bibliothèque C ++ statique
-
02-10-2019 - |
Question
J'ai des options classe appelée écrit en C ++, voici l'info d'en-tête:
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
};
};
Dans la section objective-c, j'initialiser les options comme ceci:
Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);
Maintenant, ce qui se passe est que si je passe le pointeur vers une autre méthode C ++ il fonctionne très bien, mais si je tente en fait de quoi que ce soit d'accès du côté objectif c à l'aide, par exemple
opts-> les bits ou opts-> getBits ()
Il retourne toujours la valeur entière pour l'impression
Il ressemble en quelque sorte la table des symboles est se mutilée entre le c et objectif du côté de C, mais je ne sais pas ce que je aurais pu faire pour faire cela la cause.
Le code fonctionne même avec Objective-C ++ si je compile pour le Mac, et aussi longtemps que C ++ appelle C ++, il semble fonctionner il est donc pas comme la mémoire est corrompue, il semble comme un problème de table de symbole.
Toute idée serait très apprécié.
La solution
Objective-C, BOOL
est un typedef à signed char
. Quelle définition utilisez-vous lors de la compilation C ++ pur? Si c'est différent, vous aurez toutes sortes de bizarreries, car le code C ++ et le code Objective-C ne seront pas d'accord sur la taille ou la mise en page des variables membres.