Header-Include-Problem

Diskutiere mit über: Header-Include-Problem im Mac OS X Entwickler, Programmierer Forum

  1. Spacemojo

    Spacemojo Thread Starter MacUser Mitglied

    Beiträge:
    616
    Zustimmungen:
    21
    Registriert seit:
    16.05.2004
    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: 24.11.2005
  2. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    Registriert seit:
    21.01.2005
    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: 24.11.2005
  3. Spacemojo

    Spacemojo Thread Starter MacUser Mitglied

    Beiträge:
    616
    Zustimmungen:
    21
    Registriert seit:
    16.05.2004
    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
     
  4. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    Registriert seit:
    02.09.2004
    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: 24.11.2005
Die Seite wird geladen...
Ähnliche Themen - Header Include Problem Forum Datum
in Header-File definiertes Array in main nicht sichtbar Mac OS X Entwickler, Programmierer 28.08.2015
header file xCode Mac OS X Entwickler, Programmierer 26.03.2012
Problem mit Header File Mac OS X Entwickler, Programmierer 31.03.2011
Kann GLX Header nicht finden! Mac OS X Entwickler, Programmierer 28.04.2006
Xcode Code Sense und Header Mac OS X Entwickler, Programmierer 12.07.2005

Diese Seite empfehlen

Benutzerdefinierte Suche