const und Headerdatei



  • Hallo!

    Ich wusste nicht wo ich besser beraten bin, ob im MFC-Forum oder hier. Versuche ich es mal hier.

    Ich habe ein C-Programm und habe es mit VC++7.1 deshalb auch als C-Code kompiliert. Jetzt habe ich in einer Headerdatei eine Variable die static ist. Unser Übungsleiter meinte wir können const draus machen. Dies habe ich versucht, allerdings kam beim Linken folgende Fehlermeldung:

    ueb05 error LNK2005: _NO_OF_COLS bereits in minifont.obj definiert
    ueb05 error LNK2005: _NO_OF_LINES bereits in minifont.obj definiert
    ueb05 fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

    Wenn ich die beiden Variablen NO_OF_COLS und NO_OF_LINES als static definiere funktioniert es. Mit const funktioniert es nur wenn ich den Code als C++-Code kompiliere.

    Meine Frage: Wieso kann ich const nicht in Headerdateien verwenden bzw. nur ein mal verwenden?

    Code-Hacker



  • Meine Frage: Wieso kann ich const nicht in Headerdateien verwenden bzw. nur ein mal verwenden?

    In Header Dateien sollen Definitionen stehen. Wenn du in einer Header Datei eine Variable deklarierst wird sie in jedem File in dem du diese Datei includest neu deklariert, d.h angelegt. Aus dem selben Grund steht in Header Dateien kein ausführbarer Code.

    Man sollté die MS unsitte globale Variablen in einer Headerdatei zu deklarieren und dann beliebig oft zu includen sowieso nicht machen. Glücklicherweise wehren sich die neueren Compiler mit Fehlermeldungen dagegen,
    Was man aber machen kann ist folgendes. Man öffnet eine eigene Header Datei mit den global zu definierenden Elementen mit dem unten gezeigten Konstrukt. In einer C-Datei am besten der, in der die main() Funktion steht fügt man for dem include dieser Header Datei eine "#define vardeklare" ein. In allen anderen C-Files die diese Definitionen bruachen included man diese Header Datei ohne das vorher in der C-Datei ein "#define vardeklare" steht.

    #ifdef vardeklare
    .....
    int a=33;
    const int b=33;
    int c=33;
    .....
    #else
    extern int a;
    extern const int b;
    extern int c;
    .....
    #endif
    

    Was ist der Effekt davon. Die Variablen werden nur in der einen C-Datei deklariert und in allen anderen sind nur die Verweise auf diese Deklartion.

    sie auch den Thread http://www.c-plusplus.net/forum/viewtopic.php?t=74276 speziell die zweite Hälfte.



  • Hi!

    Achso, vielen Dank für die Hilfe!

    Code-Hacker


Anmelden zum Antworten