ArduinoIDE 1.8.19, C++ und enum

OP #7548349
Lesenswert?
• ▲
▼

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 #7548748
Lesenswert?
• ▲
▼

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:
#7548781
Lesenswert?
• ▲
▼

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 #7548837
Lesenswert?
• ▲
▼

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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.