Forum: Compiler & IDEs Ino und Header Dateien


von Martin M. (ats3788)


Lesenswert?

Hallo

Ich spiele ein wenig mit Arduino Due herum und dachte mir Deine Ino 
Datei ist groß und unübersichtlich.

Hallo bastelst Du Dir ein h und Ein C File

das steht im Header

#include <URTouch.h>


URTouch  myTouch(6, 5, 4, 3, 2);


Nur dummerweise zickt der Arduino Compiler jetzt in meinem
Header rum

Bibliothek URTouch im Ordner: 
D:\__Dokus\Documents\Arduino\libraries\URTouch (legacy) wird verwendet
exit status 1
unknown type name 'URTouch'


Kann ich die Klasse im Header so nicht deklarieren.

In den gesamten Ino File hat alles funktioniert.

: Verschoben durch User
von Einer K. (Gast)


Lesenswert?

> URTouch  myTouch(6, 5, 4, 3, 2);
Das ist keine Deklaration, sondern eine Definition.
Die hat in Header Dateien eigentlich nichts verloren.
Einen der Gründe dafür, hast du gerade gefunden.

von Martin M. (ats3788)


Lesenswert?

jA dANKE
dAS IST EINE GANZ GUTE lÖSUNG

http://forum.arduino.cc/index.php?topic=84663.0

Arduino Fanboy

Das ist keine Deklaration, sondern eine Definition.
Die hat in Header Dateien eigentlich nichts verloren.
Einen der Gründe dafür, hast du gerade gefunden.

Warum gehört das nicht in einen Header ?

von Dennis S. (sixeck)


Lesenswert?

Martin M. schrieb:
> Warum gehört das nicht in einen Header ?

Arduino F. schrieb:
> Das ist keine Deklaration, sondern eine Definition.
> Die hat in Header Dateien eigentlich nichts verloren.

von Einer K. (Gast)


Lesenswert?

Aha!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Headerdateien sind dafür da, Dinge, die in einem Codemodul definiert 
werden, von außen (d.h. aus anderen Codemodulen) nutzbar zu machen. Also 
werden Headerdateien von jedem Codemodul genutzt (dort eingebunden), das 
auf diese Dinge zugreifen soll.

Wenn nun eine Definition in einer Headerdatei steht, wird das zugehörige 
Objekt bei jedem Einbinden erzeugt. Und damit ist es mehrfach vorhanden 
... was zu Fehlermeldungen des Linkers oder sehr spannenden 
Nebeneffekten führt.

In Headerdateien gehören also nur Deklarationen ("Irgendwo gibt es ein 
Objekt, das so und so aussieht"), keine Definitionen ("Das hier, an 
diesem Speicherplatz, das ist ein Objekt, das so und so aussieht").


"Objekt" bezieht sich hier auf Variablen oder Funktionen, und nicht auf 
"Objekte" im Sinne der objektorientierten Programmierung.

Eine Deklaration einer Variablen erfolgt durch Voranstellen des 
Schlüsselworts "extern", eine Deklaration einer Funktion erfolgt durch 
Angeben des Funktionsprototypen; das Schlüsselwort "extern" ist hier 
implizit und kann daher auch weggelassen werden.

von Martin M. (ats3788)


Lesenswert?

Danke rufus
nun verstehe ich das macht Sinn :-)

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.