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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren