Header-Include-Problem

Spacemojo

Spacemojo

Aktives Mitglied
Thread Starter
Dabei seit
16.05.2004
Beiträge
624
Reaktionspunkte
21
Hi!

Ich kenn mich gar nicht mehr aus, bitte helfen!

Ich habe eine C++ Datei A.cpp, in die wird ein Header X.h eingebunden mit:
extern "C"
{
#include "x.h"
}

Wenn ich kompiliere, passt alles.

Jetzt habe ich noch eine Datei B.cpp, in die wird genauso X.h eingebunden.
Jetzt meldet der Compiler Fehler, nämlich multiple Definitionen von Symbolen. Anscheinend wird X.h mehrmals eingebunden.

Aber in X.h ist der Standard-Compiler-Trick drin:
#ifndef X_H
#define X_H

... header ...

#endif

Warum geht das nicht?

Der verwirrte Tobi
 
Zuletzt bearbeitet:
Klar. Du includierst die X.h einmal in A.h und dann weiter in A.cpp. Außerdem inkludierst du die X.h noch in B.cpp. Am Ende werden dann A.cpp und B.cpp zu einem Programm.

Da hilft dir auch der Include-Guard (#ifndef...) nur wenig, denn die eine cpp-Datei kennt die #defines der anderen nicht. Das hilft nur innerhalb einer Übersetzungseinheit (Also cpp + zugehörige header-Dateien)

Also wird die Headerdatei in beiden includiert. Das bereitet dem Linker in deinem Fall Kopfzerbrechen. Die Frage ist jetzt natürlich warum.

Ich tippe auf globale Variablen in x.h? Wenn du darauf wirklich nicht verzeichten kannst.... darfst du sie in der Header-Datei nur deklarieren, nicht definieren. Sprich: In der Headerdatei muss es heißen:

extern int c;

In der cpp-Datei dann:

int c = 3;
 
Zuletzt bearbeitet:
Okay,
in der Header-Datei X.h, die in beide .cpp-Dateien eingebunden wird, sind globale Variablen drin. Das mag der Linker nicht.

Ich will und kann aber X.h nicht ändern.

Wie funktioniert's trotzdem?

Tobi
 
Schmeiss erst mal das "extern" in der Inklusion raus. Das ist eh syntaktisch verkehrt, wenn in X.h globale Variablen deklariert sind.
Wenn X.h sauber geschrieben wurde, enthält es
Code:
#ifdef __cplusplus
extern "C" {
#endif

----

#ifdef __cplusplus
}
#endif
Zur Not poste mal die 3 Files als Anhang...
 
Zuletzt bearbeitet:
Zurück
Oben Unten