mikrocontroller.net

Forum: Compiler & IDEs Ino und Header Dateien


Autor: Martin Michael (ats3788)
Datum:

Bewertung
0 lesenswert
nicht 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 Moderator
Autor: Arduino Fanboy (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Michael (ats3788)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Dennis S. (sixeck)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arduino Fanboy (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Michael (ats3788)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke rufus
nun verstehe ich das macht Sinn :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.