Mehrere Aufnahme-header-Datei Fehler in C

Also ich habe eine header-Datei, die sagen wir mal " - header.h", die geschützt ist wie folgt:

#ifndef __HEADER1_H
#define __HEADER1_H
//type and function def 
typedef struct
{
  float r; //process noise
  float k; //process gain
}state_t;

int get_state(state_t* state, float b);

#endif

Nun habe ich zwei andere überschriften, die ich wie folgt definiert:

 #ifdef __HEADER2_H
 #include "header.h"
//function def
 #endif

Zweiten header:

#ifdef __HEADER3_H
//function
//the reason it is done this way is for cnditional compiling such that if the caller  

//defines __HEADER3_H t this file won't be included.
#include "header.h"
#endif

Nun, da ich vermutete, dass der compiler sich beschwert, dass Typen und Funktionen definiert, die im header.h wurden nicht erkannt, in den source-Implementierung von header2 und header3. Also ich inklusive header.h in dem sich die Quelldateien befinden. Jetzt der linker beschwert sich Funktionen, die definiert sind in der Kopfzeile.h sind vielfach definiert.
Mein Verständnis war, da der header.h ist geschützt durch ifndef es nur einmal, so sehe ich nicht das problem.
hier ist die Fehlermeldung, die ich erhalte:

Symbol get_state multiply defined(by kalman.o and dsp.o)

Gibt es eine chance, dass ich etwas tun unusally falsch?

  • Yep, siehe die Kommentare unten -- Sie haben mehrere Dinge falsch.
  • Was versuchen Sie zu tun, mit den zweiten und Dritten code-Segmente??
  • Ich denke an dieser Stelle, dass es sinnvoll ist, Sie zu einfügen in die aktuelle header.h-Datei (oder zumindest genug, um zu zeigen, oben, unten, und mindestens ein Element der compiler beschwert sich über) -- zur weiteren Vermeidung von Tippfehler aus, der es unmöglich macht, zu beantworten in einer nützlichen Art und Weise.
  • Danke, ich bearbeitet und Hinzugefügt, der Fehler.
  • Im wesentlichen versuche ich zu vermeiden, kompilieren, wenn es __HEADER2_H und __HEADER3_H nicht definiert sind.
  • Die "mehrfach definiert" Fehler bedeutet nicht, Sie sind delcaring die Funktion zweimal (das ist, was mehrere Einschlüsse von header1.h, wie Sie eingefügt haben es hier tun würde). Es heißt, Sie haben implementiert die Funktion zweimal - was bedeuten könnte, dass Sie umgesetzt wird es in die Kopfzeile der Datei, wodurch die beiden kalman.c-und dsp.c, um es zu implementieren, oder könnte bedeuten, dass diese beiden source-Dateien tatsächlich enthalten die Implementierung (das ist einer zu viel).

InformationsquelleAutor as3rdaccount | 2012-10-03
Schreibe einen Kommentar