Pregunta

Tengo una aplicación Objetivo-C / C ++ que utiliza la funcionalidad que se proporciona por una biblioteca de C ++.

Una de las clases de la C ++ incluye una enumeración como esto:

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

La inclusión (utilizando import -si que matters-) un archivo de cabecera con la declaración de la clase anterior en una Objective-C / C ++ archivo de origen (* .mm) hará que la compilación falle ya que el preprocesador sustituirá a "YES" el término "(BOOL) 1" (y del mismo modo "NO" por "(BOOL) 0").

¿Hay una manera de arreglar eso sin cambiar el nombre de los valores de la enumeración?

¿Fue útil?

Solución

SÍ y NO son constantes predefinidas en Objective-C, declarada en la cabecera objc.h.

Usted debe ser capaz de prevenir el preprocesador para ampliar el "SÍ" y "NO" macro de. Esto se puede hacer a nivel local por #undeffing ellos.

Sin embargo, técnicamente, si está utilizando una palabra clave lenguaje como un identificador, se puede esperar problemas. Usted no va a escribir una clase que contiene un miembro llamado MAX_PATH, ¿verdad?

Otros consejos

El #import sí importa - C ++ cabeceras en un fichero de Objective-C ++ deberá incluirse con #include. Creo, aunque no estoy 100% seguro, que la elección de directiva include (#include vs #import) determina qué se utiliza preprocesador.

También podría revertir la declaración de las constantes en la enumeración, ya que por defecto, los miembros de una enumeración están asociados con números enteros a partir de 0.

Por los comentarios, estoy equivocado. Parece que vas a tener que volver a escribir la enumeración. Lo sentimos: (

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