2010-11-04 30 views
5

benim sınıf başlığının üst kısmında bir enum tanımladığınız:Amaç-C enum hatası?

enum PresetSeq{kSeqClear=0, kSeqAllBeats, kSeqAllTicks}; 

Ama enum kullanarak o sınıf için bir yöntem bildirmek çalıştığınızda. beklenen ')' 'PresetSeq'

yerine enum typedef ise önce:

typedef enum {kSeqClear=0, kSeqAllBeats, kSeqAllTicks} PresetSeq; 

Sonra derleyici mutlu, ama hatırlamıyorum

-(void)quickSetSeq:(PresetSeq)pattern forChannel:(long)ch; 

hatası alıyorum C/C++ içinde bunu yapmak zorunda.

Enemler Obj-C'de yazılmalı mı?

Teşekkür

Steve

Not; - Obj-C enum'larla ilgili diğer mesajları gördüm, ama neden bu basit vaka başarısız değil.

cevap

6

Bunlar, C enum s şeklindedir. (Objective-C'yi hatırla, C'nin sadece sıkı bir üst kümesidir).

Eğer typedef kullanmalıdır, bir sayılan türü tanımlayın. Eğer toplu olarak bu enum başvurmak için ( enum öneki olmadan) tek başına bir tip olması gerekmiyorsa

Ancak, o zaman typedef gerek yoktur ve sadece bu gibi ilan edebilir:

enum PresetSeq { 
    kSeqClear, 
    kSeqAllBeats, 
    kSeqAllTicks 
}; 
yukarıda gösterildiği gibi

typedef enum { 
    kSeqClear, 
    kSeqAllBeats, 
    kSeqAllTicks 
} PresetSeq; 

-(void)quickSetSeq:(PresetSeq)pattern forChannel:(long)ch; 

ya typedef olmadan ve enum PresetSeq sözdizimi kullanarak:

Yani, sizin durumda, bunu iki şekilde yapabilirsiniz

-(void)quickSetSeq:(enum PresetSeq)pattern forChannel:(long)ch; 
+0

Açıklama için teşekkürler. Hem typedef hem de enum sözdizimini ihmal etmenin C++ 'da yasal olup olmadığını biliyor musunuz? Bazı eski C++ kodlarım var gibi görünüyordu. – Steve555

+0

Evet, 'struct' ve 'enum' ('typedef'ing 'struct's ve' enum's)' leri sonlandırmak gayet yasal C++. 'Struct' veya 'enum 'etiketini eklerken. –

+0

Teşekkürler Max, eski kodda gördüğüm şeylerin çoğunu açıklıyor. – Steve555

4

Eğer kullanıyorsanız:

enum PresetSeq {kSeqClear=0, kSeqAllBeats, kSeqAllTicks}; 

o zaman enum adını kullanmak gerekir: sadece, hiçbir PresetSeq tip olduğundan

-(void)quickSetSeq:(enum PresetSeq)pattern forChannel:(long)ch; 

Başlangıçtaki hatadır enum PresetSeq one.

Bu, typedef sürümünü yaptığınızda, kullanabileceğiniz PresetSeq türünde bir takma ad oluşturur.Bu durumda

struct X {int a;}; 
typedef struct (int a;} Y; 

, bir türü olarak struct X veya Y kullanabilirsiniz ancak kendi başına X kullanamazsınız:

Sanki aynı.

+0

Teşekkürler pax (üzgünüm, oy vermek için yeterli sayıda yeteri yok) – Steve555

+0

İşte git, @Steve, şimdi :-) Önemli değil, çünkü günlük rep başlığımı vurdum. – paxdiablo

+0

Teşekkürler ............. :) – Steve555