Forum: Compiler & IDEs WinAVR und klassen im C++ Code


von Jens (Gast)


Lesenswert?

Hallo,

weiß jemand ob man auch irgendwie die ATMELS mit WinAVR mit Klassen
Programieren kann. Oder ist das soweit ich das verstanden habe reiner C
Code

von Chris (Gast)


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

von Chris (Gast)


Lesenswert?

Nachtrag: Wenn du nur objekt-orientiert programmieren willst, aber ohne
STL, brauchst du STLport natürlich nicht installieren.

von Jens (Gast)


Lesenswert?

Hi,

ich habe folgenden Code mit WinAVR probiert

class Test
{
public:
void methode(){
.....
}
private:
};

der Compiler konnte aber damit nichts anfangen. Im Visual Studio geht
das einwandfrei.

von Matthias (Gast)


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

von MSE (Gast)


Lesenswert?

@Jens:

Mein WinAvr kann!

Gruß, Michael

von Jens (Gast)


Lesenswert?

Vielen dank es funktioniert!!!

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.