2016-07-28 12 views
0

Ich habe eine Struktur wie diese in einer Header-Datei definiert:Siehe Enum innerhalb einer Struktur

struct MessageA { 
    enum Status { 
     eReady, eNotReady 
    }; 
}; 

Später, als ich versuche, diese Enumeration zu verwenden:

#include <MessageA.hh> 
... 
if(status != MessageA.Status.eReady) continue; 

ich den Fehler :

expected primary-expression before '.' token 
'Status' has not been declared 

ich folgendes versucht und es funktionierte:

if(status != MessageA::eReady) continue; 

Wenn jedoch Gebrauch:

if(status != MessageA::Status::eReady) continue; 

Dann bekomme ich den Fehler:

Status is not a class or a namespace 

Wenn ich den Namen des ENUM voll qualifiziert (wie wenn es mehr Aufzählungen spezifizieren erforderlich waren mit den gleichen Werten innen) Wie soll ich das machen?

+3

'if (! Status = MessageA :: eReady) fortzusetzen;' –

Antwort

4

den Umfang Operator verwenden:

MessageA::Status::eReady; 

auch beachten, dass vor dem C++ 11-Etiketten von Aufzählungen nicht in diesem Fall scoped wurden Sie den folgenden Code verwenden würde:

MessageA::eReady; 
+0

MessageA :: eReady funktioniert. MessageA :: Status :: eReady gibt jedoch den Fehler "MessageA :: Status ist keine Klasse oder ein Namespace" –

+0

@TylerDurden In Fall verwenden Sie den Pre-C++ 11-Compiler. Siehe den zweiten Teil meiner Antwort. –

+0

bedeutet das, dass Sie in pre11 nicht verschiedene Enums mit denselben Werten in ihnen haben können, weil es mehrdeutig wäre? –

1

Put ; in Ende des struct:

struct MessageA { 
    enum Status { 
     eReady, eNotReady 
    }; 
}; 

von 0 verwenden Sie dannElemente wie unten:

int main() 
{ 
    if (MessageA::Status::eNotReady == 0) 
     printf("ok"); 

    return 0; 
} 
+0

Das ist ein Tippfehler in der Frage. Die Header-Datei kompiliert gut. –

Verwandte Themen