#include wird ignoriert

Gast #1671031
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe ein Problem mit einem c++-Projekt für Atmega644P. Mein Source 
besteht (derzeit) aus einer main.cpp und den Objekten serialout.cpp und 
sensor.cpp. Für alle 3 Dateien habe ich Header-Files angelegt und alles 
(meiner Meinung nach) richtig verknüpft.
Meine main.h sieht folgendermaßen aus:

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "sensor.h"
#include "serialout.h"

Wenn ich das so compile, scheint er die serialout komplett zu ignorieren 
und ich bekommen beim instanziieren des in der serialout.h beschriebenen 
Objekts ein "does not name a type"-error. Tausche ich die Reihenfolge 
kommt der gleiche Error, allerdings auf das Objekt "Sensor" bezogen. 
Serialout compiliert dann einwandfrei. Woran könnte das liegen?
Gast #1671039
Lesenswert?
• ▲
▼
Hallo KaWe,

hast du vielleicht einen Rekursion geschaffen aus versehen ? Z.b. in den 
beiden Headern wiederum den jeweils anderen eingebunden, so dass er in 
eine Schleife kommt, welche der Compiler aber bemerkt und dann das 
Includieren abbricht?

Alternativ kann ich mir auch vorstellen, dass du einfach irgendwo ein 
Zeichen drin hast, was er nicht will, so dass er nicht mehr weiter macht 
und im nächsten Abschnitt erst weiter schaut - es scheint ja ein Problem 
mit dem Präprozessor zu sein und nicht mit dem Compiler selbst...

gruß, damdam
#1671237
Lesenswert?
• ▲
▼
... ... schrieb:
> Jörg Wunsch schrieb:
>> Bezeichner mit zwei führenden Unterstrichen sind der Benutzung durch
>> den Compiler bzw. die Systembibliothek vorbehalten.
>
> Ich kenn das das ein Unterstrich für Compiler/System ist, man selbst
> aber 2 Unterstriche verwenden sollte

Die tatsächliche Regelung ist etwas komplizierter.

Es war irgendwas in der Richtung
* doppelte Unterstriche sind generell
* ein einzelner Untertrich nur mit einem nachfolgenden Grossbuchstaben
reserviert. (oder wars umgekehrt: doppelte mit nachfolgendem 
Grossbuchstaben?)

Da man sich diese Regeln nicht besonders gut merken kann (zumindest mir 
gehts so), ist das Einfachste: Hände weg vor 1 und 2 führenden 
Unterstrichen.
Moderator Persönliche Seite #1671286
Lesenswert?
• ▲
▼
Karl heinz Buchegger schrieb:

> Die tatsächliche Regelung ist etwas komplizierter.
>
> Es war irgendwas in der Richtung
> * doppelte Unterstriche sind generell
> * ein einzelner Untertrich nur mit einem nachfolgenden Grossbuchstaben
> reserviert. (oder wars umgekehrt: doppelte mit nachfolgendem
> Grossbuchstaben?)

So herum passt es einigermaßen, außer dass es insgesamt noch
kompliziertert ist, da manches noch zwischen dateiweitem Namensraum
bzw. anderen Namensräumen unterschieden wird.

> Da man sich diese Regeln nicht besonders gut merken kann (zumindest mir
> gehts so), ist das Einfachste: Hände weg vor 1 und 2 führenden
> Unterstrichen.

Die einzige Ausnahme, die man sich durchaus auch merken kann:
innerhalb von struct/union und meiner Erinnerung nach auch enum
ist ein einzelner Unterstrich gefolgt von einem Kleinbuchstaben OK.
Kann man benutzen bspw. für sowas (und manche Leute mögen das):
1
typedef struct _foo {
2
   ...
3
} foo;

Im Prinzip kann man dann aber auch gleich schreiben:
1
typedef struct foo {
2
   ...
3
} foo;

Zwar führt in C++ eine struct immer einen entsprechenden Namen auch
im umgebenden Namensraum (ohne vorangestelltes "struct") ein, aber
ich glaube mich zu erinnern, dass eine identische Doppeldefinition
des Namens sowohl als struct als auch als typedef dort explizit
zulässig ist.  Daher hat man mit dieser Variante die Möglichkeit, für
C und C++ gleich lautende Definitionen zu schreiben, deren Typname
dann hinterher als "foo" zugreifbar ist.
Gast #1671342
Lesenswert?
• ▲
▼
Hallo zusammen,

vielen Dank für die Tipps. Es war wirklich so, dass ich aus Versehen 
eine Rekursion geschaffen habe. Habe jetzt meine header mit ifndef und 
define wieder sauber durchstrukturiert.
Vielen Dank für den Tipp! Da sucht man sich nen Wolf und es ist 
tatsächlich bloß so ein Blödsinnsfehler ...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.