ArduinoIDE 1.8.19, C++ und enum

OP #7548349

Ich möchte der besseren Wartbarkeit halber ein

1
enum class Directions { Forward, Backward };

benutzen. Nun ist der Compiler allerdings der Meinung das etwas nicht korrekt ist und gibt diese Meldung aus:

1
...
2
system.h:47:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
3

4
 enum class Directions { Forward, Backward };
5
                       ^
6
...

Lass ich das

1
class

weg, gibt es zwar kein Meckern mehr, aber ein paar Zeilen tiefer heißt es dann

1
...
2
system.h:51:3: error: unknown type name 'Directions'
3

4
   Directions dir;
5

6
   ^~~~~~~~~~
7
...

Wie geht es nun mit dem 'enum' Richtig? PS ein

1
#include <Arduino.h>

ist vorhanden.

Beitrag #7548365 wurde von einem Moderator gelöscht.
OP

Ok, meine Schuld.

Im Anhang ein kleiner Test der mein Anliegen verdeutlicht. Das 'Projekt' wird so wie es im Archiv ist (mit

1
enum class

), kompiliert. Wird in der "tester.h" das '// #include "extension.h"' auskommentiert*, kommt es zu der beschriebenen Fehlermeldung.

Was veranlasst diese Fehlermeldung. Und, falls es eine Abhängigkeit sein sollte, welche ist es und an welcher Stelle (1., 2., usw.) müsste sie in der 'tester.h' eingefügt werden.

PS *Das hizufügen/löschen der beiden "extension"-Dateien ist nartürlich von der Kommentierung ('// #include "extension.h"') abhängig.

Auch mit ArduinoIDE 2.2.1 getestet = gleiches Ergebniss :(

Angehängte Dateien:

extension.c wird auf Grund der Endung nicht als C++, sondern als C übersetzt. Damit wird natürlich auch der eingebundene Header als C interpretiert, und da gibt es kein "enum class", und bei der Instanziierung muss das Wort "enum" vor dem Namen stehen. Daher kommen die beiden genannten Fehler.

Moderator

Jörg schrieb:

Wo kann man sich über solche 'Feinheiten' schlau machen?

Schwer zu sagen. Am besten einmal in die Falle tappen, hier im Forum nachfragen, aus der Antwort lernen und den Fehler nicht wieder machen :)

Ein anderer Punkt, der mir in deinem Code aufgefallen ist:

Er enthält rekursive Includes, die man tunlichst vermeiden sollte.

Konkret: tester.h includet std_defs.h, system.h und extension.h. Jedes diese drei Header-Files includet wiederum tester.h. tester.h includet sich somit indirekt dreimal selber.

So etwas führt früher oder später zu (vor allem für Newbies) schwer zu findenden Fehlern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.