Header-Include-Problem

  1. Spacemojo

    Spacemojo Thread StarterMacUser Mitglied

    Mitglied seit:
    16.05.2004
    Beiträge:
    617
    Zustimmungen:
    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
     
    Spacemojo, 24.11.2005
  2. autoexec.bat

    autoexec.batMacUser Mitglied

    Mitglied seit:
    21.01.2005
    Beiträge:
    2.113
    Zustimmungen:
    20
    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;
     
    autoexec.bat, 24.11.2005
  3. Spacemojo

    Spacemojo Thread StarterMacUser Mitglied

    Mitglied seit:
    16.05.2004
    Beiträge:
    617
    Zustimmungen:
    21
    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
     
    Spacemojo, 24.11.2005
  4. der_Kay

    der_KayMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    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...
     
    der_Kay, 24.11.2005
Die Seite wird geladen...
Ähnliche Themen - Header Include Problem
  1. RuditheKranich
    Antworten:
    7
    Aufrufe:
    454
    RuditheKranich
    29.08.2015
  2. 5i8hil
    Antworten:
    2
    Aufrufe:
    818
  3. IloveAMG
    Antworten:
    11
    Aufrufe:
    1.092
  4. balufreak
    Antworten:
    1
    Aufrufe:
    516
  5. mdaniela
    Antworten:
    6
    Aufrufe:
    1.771
    mdaniela
    28.04.2006