2009-12-29 2 views
9

Ho un enum chiamato RandomEnum nel file di foo.h:Utilizzo delle enumerazioni come parametri in un file esterno in Objective-C?

// foo.h 
typedef enum RandomEnum { 
    ran_1 = 0, 
    ran_2 
} RandomEnum; 

In un altro file, bar.h, sto cercando di utilizzare RandomEnum come un tipo di parametro:

// bar.h 
#import "foo.h" 

@interface bar : NSObject {} 
    -(RandomEnum)echo:(RandomEnum)ran; 
@end 

Tuttavia, il compilatore non sembra riconoscere RandomEnum. Lo sta facendo anche possibile?

Errore del compilatore:

error: expected ')' before 'RandomEnum' 

Edit: Aggiunto codice per foo.h di chiarimento

+0

è che il codice copiato e incollato direttamente da una fonte che sta mostrando il problema? Perché ho appena compilato il tuo codice e ha funzionato bene. – Chuck

+0

Il tuo codice è stato compilato bene sul mio Mac (10.6). Hai '#importato ' per ottenere NSObject nell'ambito? – Yuji

risposta

5

Alla fine è possibile. Il mio problema aveva a che fare con strane cross-include che non erano dirette, ma erano ancora presenti.

Nell'esempio fornito, foo.h include thing.h che includeva qualcosa.h che includeva bar.h. Questa dipendenza incrociata è ciò che è diventato il problema.

Ancora, utile per i bug del compilatore. Grazie per le risposte!

12

Il C costruire enum RandomEnum non definisce un tipo chiamato RandomEnum - definisce un tipo chiamato enum RandomEnum. Per poter scrivere solo RandomEnum per il tipo, è necessario utilizzare un typedef.

+0

Grazie per la risposta. Avrei dovuto chiarire che sto usando un typedef in foo.h – mindeavor

3

Come detto @Chuck, che funzionerà se si fa questo, se non si vuole dichiarare una typedef:

-(RandomEnum)echo:(enum RandomEnum)ran;