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é.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top