Heim Backend-Entwicklung C++ C++-Fehler: Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig. Wie soll ich sie ändern?

C++-Fehler: Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig. Wie soll ich sie ändern?

Aug 22, 2023 pm 05:42 PM
c++ 枚举类型 报错

C++-Fehler: Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig. Wie soll ich sie ändern?

C++ ist eine häufig verwendete Programmiersprache, die häufig beim Programmdesign und der Programmentwicklung verwendet wird. Beim Schreiben von Programmen in C++ treten häufig verschiedene Kompilierungsfehler und Warnungen auf. Unter anderem stoßen wir bei der Verwendung von Aufzählungstypen manchmal auf den Fehler „Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig“. In diesem Artikel wird erläutert, was C++-Aufzählungstypen sind und wie dieser Fehler geändert werden kann.

C++-Aufzählungstypen

Lassen Sie uns zunächst kurz die Aufzählungstypen (auch Aufzählungsvariablen genannt) in C++ vorstellen. In C++ können Aufzählungstypen einige Werte als aufzählbare Liste definieren. Diese Werte werden Aufzählungskonstanten genannt. Hier ist ein Beispiel:

enum Color {RED, BLUE, GREEN};
Nach dem Login kopieren

Hier definieren wir einen Aufzählungstyp „Farbe“ und definieren seine Werte als ROT, BLAU und GRÜN. Jede Enum-Konstante ist hier tatsächlich ein ganzzahliger Wert. Standardmäßig ist der Wert von ROT 0, der Wert von BLAU 1 und der Wert von GRÜN 2.

Auf diese Weise können wir bequem verschiedene Werte als Aufzählungskonstanten verwenden, wodurch das Programm klarer und verständlicher wird. So können beispielsweise Attribute wie Wochentag oder Farbe definiert werden.

Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig

Bei der Definition des Aufzählungstyps wird jedoch manchmal die Fehlermeldung „Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig“ angezeigt. Zum Beispiel:

enum Fruit {APPLE, BANANA, ORANGE, MANGO} f;
Nach dem Login kopieren

Hier definieren wir einen Aufzählungstyp Obst und definieren seinen Wert als APFEL, BANANE, ORANGE, MANGO usw. sowie eine Aufzählungsvariable f.

Beim Kompilieren des Programms werden wir jedoch einen Kompilierungsfehler feststellen:

error: enumeration type 'Fruit' is not allowed as underlying type of enumeration
Nach dem Login kopieren

Der Grund für diesen Fehler ist, dass der Aufzählungstyp vor dem C++11-Standard erfordert, dass die Aufzählungskonstante ein ganzzahliger Typ sein muss. Obwohl wir in diesem Beispiel nicht jeder Aufzählungskonstante explizit einen Wert zugewiesen haben (der Standardwert ist ein ganzzahliger Typ), war der von uns deklarierte Fruit-Aufzählungstyp ein nicht ganzzahliger Typ, sodass der Compiler einen Fehler meldete.

Lösung

Also, wie kann man diesen Fehler ändern? Wir können dieses Problem lösen, indem wir die neue „Aufzählungsklasse“ von C++11 verwenden. Aufzählungsklassen sind einer der neuen Wissenspunkte in C++11. Im Vergleich zu früheren Aufzählungstypen gibt es einige Unterschiede in Definition und Verwendung.

Zum Beispiel können wir den oben genannten Fruit-Aufzählungstyp wie folgt ändern:

enum class Fruit {APPLE, BANANA, ORANGE, MANGO};
Nach dem Login kopieren

Hier verwenden wir das Schlüsselwort enum class, um Fruit als Aufzählungsklasse zu definieren. Im Gegensatz zu den bisherigen Aufzählungstypen sind die Aufzählungskonstanten in der Aufzählungsklasse nicht mehr vom Typ int. Auf diese Weise treten keine Kompilierungsfehler auf, selbst wenn jeder Aufzählungskonstante nicht explizit ein Wert zugewiesen wird.

Beachten Sie, dass auf Enumerationskonstanten, die mithilfe von Enumerationsklassen definiert wurden, mit dem Bereichsspezifizierer (::) zugegriffen werden muss. Zum Beispiel:

enum class Fruit {APPLE, BANANA, ORANGE, MANGO};
Fruit f = Fruit::BANANA;
Nach dem Login kopieren

Zu diesem Zeitpunkt sollte der Wert von f der Wert der BANANA-Konstante in der Fruit-Aufzählungsklasse sein. Dadurch vermeiden wir den Fehler „Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig“ bei der Definition eines Aufzählungstyps.

Fazit

In C++ ist der Aufzählungstyp ein häufig verwendeter Datentyp, mit dem einige Werte problemlos als aufzählbare Liste definiert werden können. Bei der Verwendung von Aufzählungstypen kann es jedoch zu einem Kompilierungsfehler „Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig“ kommen. Zu diesem Zeitpunkt können wir dieses Problem lösen, indem wir die neue Aufzählungsklasse in C++ 11 verwenden, um Kompilierungsfehler beim Definieren von Aufzählungstypen zu vermeiden.

Das obige ist der detaillierte Inhalt vonC++-Fehler: Die Deklaration von Aufzählungen nicht ganzzahliger Typen ist nicht zulässig. Wie soll ich sie ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Parallelitätssicheres Design von Datenstrukturen in der C++-Parallelprogrammierung? Parallelitätssicheres Design von Datenstrukturen in der C++-Parallelprogrammierung? Jun 05, 2024 am 11:00 AM

Parallelitätssicheres Design von Datenstrukturen in der C++-Parallelprogrammierung?

Das C++-Objektlayout ist auf den Speicher abgestimmt, um die Effizienz der Speichernutzung zu optimieren Das C++-Objektlayout ist auf den Speicher abgestimmt, um die Effizienz der Speichernutzung zu optimieren Jun 05, 2024 pm 01:02 PM

Das C++-Objektlayout ist auf den Speicher abgestimmt, um die Effizienz der Speichernutzung zu optimieren

Wie implementiert man einen benutzerdefinierten Komparator in C++ STL? Wie implementiert man einen benutzerdefinierten Komparator in C++ STL? Jun 05, 2024 am 11:50 AM

Wie implementiert man einen benutzerdefinierten Komparator in C++ STL?

Wie implementiert man das Strategy Design Pattern in C++? Wie implementiert man das Strategy Design Pattern in C++? Jun 06, 2024 pm 04:16 PM

Wie implementiert man das Strategy Design Pattern in C++?

Ähnlichkeiten und Unterschiede zwischen Golang und C++ Ähnlichkeiten und Unterschiede zwischen Golang und C++ Jun 05, 2024 pm 06:12 PM

Ähnlichkeiten und Unterschiede zwischen Golang und C++

Wie kopiere ich einen C++-STL-Container? Wie kopiere ich einen C++-STL-Container? Jun 05, 2024 am 11:51 AM

Wie kopiere ich einen C++-STL-Container?

Was sind die zugrunde liegenden Implementierungsprinzipien von C++-Smartpointern? Was sind die zugrunde liegenden Implementierungsprinzipien von C++-Smartpointern? Jun 05, 2024 pm 01:17 PM

Was sind die zugrunde liegenden Implementierungsprinzipien von C++-Smartpointern?

Wie implementiert man C++-Multithread-Programmierung basierend auf dem Actor-Modell? Wie implementiert man C++-Multithread-Programmierung basierend auf dem Actor-Modell? Jun 05, 2024 am 11:49 AM

Wie implementiert man C++-Multithread-Programmierung basierend auf dem Actor-Modell?

See all articles