Pergunta

I têm uma aplicação Objectivo-C / C ++ que usa a funcionalidade que é fornecida por uma biblioteca de C ++.

Uma das classes C ++ inclui um enum como este:

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

Incluindo (usando # Import -se que matters-) um arquivo de cabeçalho com a declaração de classe acima em uma Objective-C / C ++ arquivo de origem (* .mm) fará a compilação falhar desde o pré-processador irá substituir "SIM" por o termo "(BOOL) 1" (e também "NÃO" por "(BOOL) 0").

Existe uma maneira de corrigir isso sem renomear os valores do enum?

Foi útil?

Solução

SIM e NÃO são predefinidos constantes em Objective-C, declarada no cabeçalho objc.h.

Você deve ser capaz de impedir que o pré-processador para expandir o "sim" e "não" macro de. Isso pode ser feito por localmente #undeffing eles.

Mas, tecnicamente, se você estiver usando uma palavra-chave linguagem como um identificador, você pode esperar problemas. Você não vai escrever uma classe que contém um membro chamado MAX_PATH, você iria?

Outras dicas

O #import importa - cabeçalhos C ++ em um C Objective-arquivo de origem ++ devem ser incluídas com #include. Eu acho que, embora não estou 100% de certeza, que a escolha de incluir directiva (#include vs #import) determina qual pré-processador é utilizado.

Você também pode inverter a declaração das constantes na enumeração, uma vez que, por padrão, membros de uma enumeração estão associados com números inteiros a partir de 0.

Por comentários, eu estou errado. Parece que você vai ter que reescrever o enum. Desculpe: (

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top