Forum: Mikrocontroller und Digitale Elektronik STM32CubeIDE enum class in header


von Martin (Gast)


Lesenswert?

Hallo,

seit längerem... mache ich mal wieder was in C++. Dazu die 1.8.0 
STM32CubeIDE heruntergeladen, neues STM32-Projekt mit C++ (17) angelegt.

Quasi "leer" habe ich im Projekt eine Datei "header.h" angelegt, in der 
nur folgendes steht (außer include-guard):
1
enum class Farbe {
2
ROT, 
3
BLAU
4
};
Nun meckert mir der Compiler als einzigen Fehler in dieser Datei und dem 
ganzen "Projekt" an:
error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

Irgendwie stehe ich total auf dem Schlauch. Wird ja irgendwas ganz 
dämliches sein. Erbarmt sich bitte wer kurz?

von Klaus W. (mfgkw)


Lesenswert?

Das sollte ab C++ 14 gehen.
Hast du vielleicht C++98 eingestellt?

von Master-Jimmy (Gast)


Lesenswert?

Sieht so aus, als ob die Datei automatisch als C-Header-Datei kompiliert 
wird. Du müsstest die Datei wohl einfach in "header.hpp" umtaufen und es 
würde Licht... ;)

von Klaus W. (mfgkw)


Lesenswert?

Master-Jimmy schrieb:
> Sieht so aus, als ob die Datei automatisch als C-Header-Datei kompiliert
> wird. Du müsstest die Datei wohl einfach in "header.hpp" umtaufen

Die Datei umbenennen wird nicht helfen.

Aber du hast natürlich recht: wenn das als C kompiliert wird, kann es 
nicht gehen.
Dann muß man der STM32-IDE sagen, daß sie C++ kompilieren soll.

von Martin (Gast)


Lesenswert?

Klaus W. schrieb:
> Das sollte ab C++ 14 gehen.
> Hast du vielleicht C++98 eingestellt?

Nein, C++17 (s.o.).

Klaus W. schrieb:
> Dann muß man der STM32-IDE sagen, daß sie C++ kompilieren soll.

Habe ich durch Auswählen bei Anlage des Projektes ja gemacht.

Ich habe gerade mal mit anderen Suchbegriffen "Erfolg" gehabt: Ist wohl 
ein altes und bekanntes Problem, daß Cube mit C++ wohl nicht so 
geschmeidig läuft. Die Königslösung ist wohl, aus der main.c an 
geeigneter Stelle my_main.cpp aufzurufen und von aus dieser ganz normal 
das C++-Projekt zu starten.

Ich war bisher nur mit der MCUXpresso IDE unterwegs, da läuft C++ ohne 
Probleme nach der Auswahl.

von Lutz (Gast)


Lesenswert?

Yup, eine my_main.h (oder hpp, je nach Gusto) mit einer Funktion
1
extern "C" void my_main(void)
 deklarieren und diese my_main.hpp in main.c inkludieren. In main.c dann 
my_main() aufrufen. In my_main.cpp kann man sich dann in der Funktion 
my_main() in C++ austoben. In my_main() steht dann praktisch das 
Hauptprogramm.

Hintergrund ist, daß die Cube immer eine main.c generiert. Also immer 
nur C-Code generiert.

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.