2013-02-28 19 views
9

Enumlar için doğru bir şekilde ileri bildirim kullanmaya çalışıyorum. Bu yüzden internette aradım ama işe yarayan bir şey bulamıyorum.Enum Forward Declaration

Bir başlığında kullanıyorum:

struct myStruct { 
    [...] 
    myEnumProcessState osState; 
    [...] 
}; 

Ve başka başlığındaki:

enum myEnumProcessState { 
    eNotRunning, 
    eRunning 
}; 

ben

// Forward declaration 
enum myEnumProcessState; 

Sonra bir yapı içinde bu enum kullanıyorum türün kabul edilecek enum ileri beyannameye konması gerektiğini tespit etti. Ancak, bir Süreç Devleti için hangi "tip" i koymam gerektiğini bilmiyorum. Bunlar çalışmaz: Ben ileri beyanı atlamak istedi ama artık bulamıyorum çünkü benim Struct

yüzden biraz kafam karıştı ... ağlıyor

enum myEnumProcessState : unsigned int; 
enum myEnumProcessState : String; 

. Bir çözüm biliyor musunuz?

çok teşekkürler C++ 11 Önce

+0

neden gidebildiğini ilan iletmek gerekiyor? Bunu kullanmadan önce tanımlamanız (yani, enum dosyasına sahip olan dosyayı dahil et/her iki dosya tarafından da eklenebilecek bir dosyaya taşıyın)? – Default

+0

Peki ... bu işe yarar. ileri bir beyan ile bunu yapmak istedim Şimdi, eğer sadece "temiz" bir çözüm atlamaksa, ben ... –

+0

Aslında bunun bir çözümü olup olmadığını bilmiyorum. görmek Nedeni neden yapmak istersiniz? – Default

cevap

16

:), C++ hiç çeteleler ileriye ilanına destek vermedi! Ancak, bazı derleyiciler (MS Visual Studio gibi) bunun için dil uzantıları sağlar.

Derleyiciniz C++ 11'i desteklemiyorsa, enum ileri bildirimlerindeki belgelerine bakın.

C++ 11 kullanabiliyorsa, enum class sözdizimi (neredeyse doğru var, ancak ek class anahtar kelimeye dikkat vardır:

// Forward declaration 
enum class myEnumProcessState: unsigned int; 

// Usage in a struct 
struct myStruct {myEnumProcessState osState;}; 

// Full declaration in another header 
enum class myEnumProcessState: unsigned int { 
    eNotRunning, 
    eRunning 
}; 

// Usage of symbols (syntax may seem slightly unusual) 
if (myObject.osState == myEnumProcessState::eNotRunning) { 
    ... 
} 
+0

Hm. Bunu koyduğumda "hata: beklenen" {'önce'; '; ligne üzerinde belirteci "enum class myEnumProcessState: unsigned int;" ... –

+0

Derleyiciniz C++ 03'i destekliyor ancak C++ 11'i desteklemiyor. Envanterlerin ileriye yönelik bildirimleri C++ 03'te desteklenmiyor. ancak bazı derleyiciler onları bir dil uzantısı olarak destekliyorlar (bu uzantıları kullanmanız gerekip gerekmediğini veya başka bir solucan olabilir) – anatolyg

+0

G ++ 4.7.2, varsayılan olarak C++ 11'i takip ettim. ? –