Wollte eben im neuen AVR Studio mit GCC eine C++ Klasse erzeugen, aber leider will der Copmiler das nun nicht mehr schlucken. in meinem header-file steht folgendes: class test { public: void tueWas(void); private: int nix; } leider Stoppt der Compilierforgang schon beim Wort "test"
Nö, gccavr ist auch ein C++-Compiler. Ob nun als C oder C++ übersetzt wird, hängt von der Dateinamenserweiterung der übersetzten Module ab (*.c -> C, *.cpp -> C++ und -unter Windows sehr eigenwillig- *.C -> C++). Allerdings wird der Compiler nicht einfach so den Compiliervorgang beenden, sondern dazu auch noch irgendwas Informatives beitragen.
wenn Du hinter class test { .. } auch das Semikolon setzt, klappt es zumindest beim x86 g++ compiler. Wenn ich mich recht erinnere, hat avr-gcc auch den g++ build - inwiefern es nützlich ist mit kastrierten C++ zu arbeiten, ist Ansichtssache. Gegenüber C mit OO Design bleibt imo als Vorteil nur CTor/DTor übrig, kein RTTI, keine exceptions etc. Evtl. noch so kleine Schmankerln wie for(unsigned i = 0; i != END; ++i) {}, was Du aber auch mit der cmd line --std=gnu99 in C scharf machen kannst. Viele Grüße Olaf
ok, dann mal die andere Frage: wie erzeuge ich nun eine Klasse in C? ..oder steh ich nun so auf dem schlauch dass das auf meinem AVR garnicht geht?
Vorteile z.B.: - Encapsulation. - Vereinheitlichte Schnittstellen verschiedener I/O gleicher Art, z.B.digitale und analoge Temperatursensoren im gleichen Gerät.
> Gegenüber C mit OO Design bleibt imo als Vorteil nur CTor/DTor > übrig, kein RTTI, keine exceptions etc. Was ist mit Templates und Operator-Überladung? @Rufus: > Ob nun als C oder C++ übersetzt wird, hängt von der > Dateinamenserweiterung der übersetzten Module ab (*.c -> C, *.cpp > -> C++ und -unter Windows sehr eigenwillig- *.C -> C++). Es ist aber immer besser, g++ für C++-Code zu verwenden statt gcc. Beim Compilieren ist gcc noch ok, aber beim Linken muß es dann doch g++ sein. Und schon wegen der Konsostenz nimmt man am besten für beides g++.
Wie heisst denn die Datei, die diese Headerdatei #includiert? Im übrigen fehlt ein Semikolon - hinter die schließende geschweifte Klammer gehört eines.
wow, das geht ab hier ;-) Nun gut, ein paar Vorteile hat es noch, wie ihr gerade schriebt. Es erinnert mich aber auch etwas an die Situation von vor einigen Jahren, C++ im linux kernel machen zu wollen. Irgenwann war meine kleine lib fertig, die fehlenden symbole wurden gelöst; aber letzlich eckte ich dann doch immer wieder an den Begrenzungen dort an. Der Grund war u.a. Idiome, STL ..., wie man sie auch von der x86 und 32bit OS Programmierung her kennt. Eigentlich will man ja sein (damals Echtzeit-) Problem im Kernel mit C++ lösen und nicht die komplett STL, RTTI, EH etc. portieren .... Mit einem Subset kann man leben - ich selber würde wohl beim AVR/C++ wieder auf dem Bauch landen. Viele Grüße Olaf
Auf meine Frage > Wie heisst denn die Datei, die diese Headerdatei #includiert? mit > #include "file.h" zu antworten, ist nicht wirklich sinnvoll, nicht wahr?
oh sorry, hab zu schnell gelesen, die datei in der die Inlucde Anweisung steht ist meine Main.c Nicht zu vergessen ist ja hier, dass das ganze ein Projekt mir dem AVR Studio ist, welches keine cpp Files zulässt (also mit WinAVR untestützung, klar)
Dateiendung '.c' sagt dem Compiler, daß es sich um C-Code handelt. C unterstützt bekanntlich keine Klassen...
also um das ganze nun zusammenzufassen: AVR GCC in verbindung mit AVR Studio laesst keine CPP Dateien zu, die sind aber unbedingt notwendig fuer Klassen, folglich keine Klassen!
Das versteh ich jetzt wierum nicht: was bedeutet avr-gcc lässt keine CPP Dateien in Verbindung mit AVR Studio zu? Wo hängt es denn da? Am Studio? Oder nur an der Endung .cpp?
> oh sorry, hab zu schnell gelesen, die datei in der die > Inlucde Anweisung steht ist meine Main.c Und genau dieser Name ist das Problem. Die Datei muss mit *.cpp enden, sonst wird's nichts mit C++.
C++ mit AVRStudio funktioniert,... allerdings nur mit umwegen. Und zwar kannst du nicht das automatisch vom AVRStudio generierte MakeFile benutzen sondern musst ein externes C++ "kompatibles" MakeFile angeben. Das geht unter "project->Configuration Options".
wenn ich mir die Tortour so anschaue, wäre autoconf && automake unter cygwin (k)eine Alternative?
Also ich gehe so vor: Im AVRStudio (4) alles (Projekt, .c, .h Dateien) ganz normal anlegen. Dann ein Makefile exportieren. In den Projektoptionen "Use External Makefile" anklicken und das eben exportierte Makefile anwählen. Im Makefile dann noch avr-gcc durch avr-g++ ersetzen und die "../" vor den .c Dateien ersetzen. Um den Code klein zu halten wähle ich -O2 als Optimierungslevel. Debuggen geht damit immer noch (ja man kann dann den C++ Code im AVR Studio 4 debuggen)
Kann mir bitte jemand sagen durch was man das "../" ersetzen muss? Ich hab probiert es ersatzlos zu streichen was leider nicht das gewünschte Resultat brachte (wie vermutet). Der Compiler konnte zwar kompilieren, aber nur als C Code, Klassen usw erkannte er nicht. Hoffe ihr könnt mir helfen. mfg Gernot
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.