Betrachten Sie die folgende C++ Aufzählungen lösen:Wie Compiler Enum Neudeklaration Konflikt
enum Identity
{
UNKNOWN = 1,
CHECKED = 2,
UNCHECKED = 3
};
enum Status
{
UNKNOWN = 0,
PENDING = 1,
APPROVED = 2,
UNAPPROVED = 3
};
Der Compiler kollidierten die beiden UNKNOWN
Artikel und warf diesen Fehler:
error: redeclaration of 'UNKNOWN'
Ich bin in der Lage, diesen Fehler zu lösen eine Veränderung von UNKNOWN
bis UNKNOWN_a
, aber ich möchte die Namen nicht ändern.
Wie kann ich diesen Konflikt lösen ohne Ändern der enum
Artikel Name?
Funktioniert nicht wie es ist, wenn Sie einen als Parameter haben möchten. – chris
@chris Ich bin mir bewusst. Dies ist eines der Probleme, die 'enum-Klasse' nicht einfach zu verwenden. Ich meine, du könntest die enums immer noch mit einem Namen deklarieren ('enum value {/*...*/') und sie wie 'void foo (Identity :: value)' verwenden, aber du verlierst immer noch die Vorteile von type Sicherheit, etc. –
Nun, die lustige Sache ist, dass C++ 11 ist ziemlich häufig nicht möglich, besonders im kommerziellen Bereich - zum Beispiel viele Kunden des Unternehmens, für das ich arbeite, sind immer noch alte Systeme wie RHEL und nicht wollen Upgraden, solange das System gut läuft (es kommt häufig vor, dass beim Release-Upgrade schwerwiegende Inkompatibilitäten auftreten). Als Ergebnis ist C++ 11 verboten und alles muss auch in älteren Compilern erstellt werden. In der Tat war C++ 11 in jedem der letzten 4 Unternehmen, für die ich arbeitete, verboten. Und eine Firma, für die ich vorher gearbeitet habe, ist AFAIK, die auch noch in MSVC 6 baut :-) – axalis