Domanda

Ho una classe denominata opzioni scritto in C ++, ecco le informazioni di intestazione:

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
};

};

Nella sezione Objective-C, ho inizializzare opzioni come questo:

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

Ora, quello che succede è che se mi passate il puntatore ad un altro metodo che funziona bene, ma C ++ se io in realtà cerco di accedere a qualsiasi cosa nel lato oggettivo c utilizzando, ad esempio

opts-> bits o opts-> getbits ()

Si restituisce sempre il valore intero per la stampa

Sembra che in qualche modo la tabella dei simboli è sempre alterati tra l'Objective-C e C ++ lato, ma non ho idea di quello che avrei potuto fare per fare causa questo.

Il codice funziona anche con Objective-C ++ se compilo per il mac, e fintanto che C ++ sta chiamando C ++ sembra funzionare quindi non è come il ricordo è sempre corrotto, sembra proprio come un problema di simbolo tavolo.

Tutta la comprensione sarebbe molto apprezzato.

È stato utile?

Soluzione

In Objective-C, BOOL è un typedef per signed char. Quale definizione stai usando quando si compila puro C ++? Se è diverso, si otterrà ogni sorta di stranezza, perché il codice C ++ e il codice Objective-C ++ non saranno d'accordo sulle dimensioni o il layout delle variabili membro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top