Domanda

Ho un'applicazione Objective-C / C ++ che utilizza la funzionalità che è fornita da una libreria C ++.

Una delle classi del C ++ include un enum in questo modo:

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

Tra cui un file di intestazione con la dichiarazione di classe superiore in un Objective-C file sorgente (* .mm) / C ++ (usando #import -se che matters-) farà la compilazione fallire in quanto il preprocessore sostituirà "Yes" il termine "(BOOL) 1" (e similmente "NO" con "(BOOL) 0").

C'è un modo per risolvere questo senza rinominare i valori della enum?

È stato utile?

Soluzione

SI e NO sono costanti predefinite Objective-C, ha dichiarato nell'intestazione objc.h.

Si dovrebbe essere in grado di prevenire il preprocessore per espandere il "SI" e "NO" macro di. Questo può essere fatto a livello locale #undeffing loro.

Ma tecnicamente, se si sta utilizzando una parola chiave il linguaggio come un identificatore, ci si può aspettare problemi. Non sarà scrivere una classe contenente un membro chiamato MAX_PATH, vero?

Altri suggerimenti

Il #import non importa - C ++ intestazioni in un file sorgente Objective-C ++ dovrebbero essere inclusi con #include. Credo che, anche se non sono sicuro al 100%, che la scelta di includere direttiva (#include vs #import) determina quale preprocessore viene utilizzato.

Si potrebbe anche invertire la dichiarazione delle costanti nel enum, dal momento che per impostazione predefinita, i membri di un enum sono associati con numeri interi a partire da 0.

Per commenti, mi sbaglio. Sembra che si dovrà riscrivere l'enum. Siamo spiacenti: (

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