Pregunta

Tengo una clase llamada opciones escritas en C ++, aquí está la información de la cabecera:

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

};

En la sección de Objective-C, I inicializar Opciones como esto:

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

Ahora lo que pasa es que si paso el puntero a otro método que funciona bien, pero C ++ si realmente tratar de acceder a cualquier cosa en el lado objetivo c utilizando, por ejemplo

opts-> bits de o opts-> getbits ()

Siempre devuelve el valor entero para la impresión

Parece que de alguna manera la tabla de símbolos se está destrozado entre el objetivo y el lado C-C ++, pero no tengo ni idea de lo que podría haber hecho para hacer causa esto.

El código funciona incluso con Objective-C ++ si compilo para el mac, y siempre que C ++ está llamando C ++ parece que funciona así que no es igual que la memoria se está dañado, sólo se ve como un problema de tabla de símbolos.

Cualquier penetración sería muy apreciada.

¿Fue útil?

Solución

En Objective-C, BOOL es un typedef a signed char. ¿Qué definición está usando al compilar C ++ puro? Si es diferente, podrás obtener toda la rareza, ya que el código C ++ y el código de Objective-C ++ no estarán de acuerdo en el tamaño o la disposición de las variables miembro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top