WinAVR und klassen im C++ Code

Gast #180708
Lesenswert?

C++ kann man verwenden, allerdings nur zum Teil.

Es gab hier schonmal eine Diskussion über das Thema, ich finde sie nur
leider gerade nicht. :/


Kurzzusammenfassung:
- Klassen funktionieren.
- new/delete funktionieren, wenn man sie selbst auf malloc/free
weiterleitet.
- Vererbung funktioniert (Mehrfachvererbung und virtuelle Basisklasse
hab ich nicht getestet).
- Virtuelle Methoden funktionieren (großer Pluspunkt).
- Rein virtuelle Methoden funktionieren (fehlt nur ein Symbol, die
Fehlermeldung sagt welches).
- Templates funktionieren (soweit ich weiß).
- Konstruktion von globalen bzw. statischen C++-Objekten funktioniert
(soweit ich weiß, bin mir in dem Punkt gerade nicht sicher).
- Methodenzeiger müssten eigentlich funktionieren, habs aber nicht
getestet.

- Referenzen funktionieren leider nicht so gut (der Compiler hat da
AFAIK Probleme mit dem alignment), führen noch oft zu
Compiler-Fehlern.
- STL funktioniert praktisch nicht (kannst es mit STLport ausprobieren,
z.T. funktioniert's).




Fakt ist, dass es noch keine avr-libc++ gibt. Die ganzen
C++-Standardfunktionen hast du also nicht zur Verfügung. Es gibt zum
Beispiel kein <cstdlib>, nur die C-Version <stdlib.h>.

Ich würde dir raten STLport[1] zu installieren und es damit zu
versuchen (ich kann aber nicht garantieren, dass der Rat sinnvoll ist).
STLport kannst du ziemlich fein anpassen, sodass einige Teile mit
avr-gcc zusammenspielen sollten.


HTH, Chris


[1] http://www.stlport.org/download.html
Gast #180711
Lesenswert?

Hi

Dateiname? Der GCC erkennt anhand des Suffix um welche Sprache es sich
handelt. Bei *.c nimmt er den C-Compiler und der kann bekantlich mit
C++ Klassen nichts anfangen. Verwende deshalb *.C, *.cc, *.cpp, *.c++,
*.cp oder *.cxx oder gib die Sprache mit -x direkt an.

Matthias

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