Forum: Compiler & IDEs ArduinoIDE 1.8.19, C++ und enum


von Jörg (lixtop)


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.

von Oliver S. (oliverso)


Lesenswert?

Vermutlich Fehler in Zeile 42, die du hier gar nicht zeigst.

Oliver

Beitrag #7548365 wurde vom Autor gelöscht.
von Hugo H. (hugo_hu)


Lesenswert?


von Jörg (lixtop)


Angehängte Dateien:

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 :(

von Rolf M. (rmagnus)


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.

: Bearbeitet durch User
von Jörg (lixtop)


Lesenswert?

Danke. Darauf muss man erstmal kommen.

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

PS Ich bin ein absoluter C/C++ Newbee.

von Yalu X. (yalu) (Moderator)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.