Includes von Header-Dateien

  • Einen wunderschönen guten Tag wünsche ich,

    ich habe folgendes Problem:


    Ich schreibe ein Programm, welches Klassen, Headerdateien, welche zu den Klassen gehören, eine Config-Datei und natürlich eine Main-Datei.

    Die Header-Dateien Includieren sich untereinander (nicht alle, nur 1,2 stk.) und ich möchte in der Config-Datei etwas (in diesemfall ein HDC) definieren.

    Soweit so gut...

    In meiner Config-Datei steht:


    Code
    #ifndef buffers
    #define buffers
    #endif
    extern HDC  frontbuffer ;
    extern HDC  backbuffer ;

    In den Header-Dateien:

    C
    #ifndef buffers
    #include "conf_cpp.h"
    #endif

    ...

    Benutze ich in den Header-Dateien die oben genannte Variante mit extern, so bekomme ich diesen Fehler:
    [Linker error] undefined reference to 'frontbuffer'
    und
    [Linker error] undefined reference to 'backbuffer'

    wenn ich aber extern weglasse, bekomme ich folgenden Fehler:
    multiple definition of 'backbuffer'
    bzw.
    multiple definition of 'frontbuffer'


    Vielleicht kann mir ja wer auf die sprünge helfen, wie ich denn nun zu meinem gewünschten Ergebniss komme.


    Schonmal vielen Dank im Voraus :)

  • Hi!
    Erstmal: Ein Header-Guard sieht so aus:

    Code
    #ifndef MYFILE_H
    #define MYFILE_H
    // Code...
    #endif


    Beim #include brauchst du kein #if, brauchst du z.B. bei <iostream> ja auch nicht.
    Du kannst mit dem GNU Compiler (MinGW unter Windoof) recht einfach auf der Konsole den Präprozessor überprüfen:

    Code
    g++ -E main.cpp # Gibt Code nach dem Präprozessor aus


    Falls du GNU/Linux, Mac, BSD oder unter Windoof eine installierte Bash hast geht es so:

    Code
    g++ -E main.cpp | less # Verhindert Bildschirmüberflutung

    Dann: Was soll das für ein Config-File sein? Für mich ist das ein normaler Header-File.
    Das extern entbindet dich nicht deiner Pflicht, die Definition der Klasse/der Funktion zu linken. Du musst dem Linker mitteilen, dass die entsprechende Objektdatei berücksichtigt werden soll. Sonst läuft die Verwendung ins Leere und er meckert zu Recht.

    Viele liebe Grüße
    The User