globale var. in header-file



  • hey leutz...

    ich möchte eine globale variable in einer header-file deklarieren
    und diese dann in verschiedenen cpp-files benutzen, die alle
    die header-file einbinden.

    das geht auch solange gut, wie die variable nur in einer cpp-datei
    benutze.

    wenn ich nun aber die in "Main.h" deklarierte variable ind
    "1.cpp" UND "2.cpp" verwende, bekomme ich einen linker-error:

    die variable "g_nExtern" ist bereits in "1.obj" definiert.

    ( und, ja, ich habe die vaiable als "extern int" deklariert)

    was kann ich da machen???

    mfg, in diesem sinne

    ich

    ps: ich poste hier, in diesem forum, weil ich msvc 6.0 benutze...
    könnte ja daran liegen...



  • Hallo.

    binde deine Deklarationen wenn möglich immer in eine Header-Datei
    (.h/.hpp) ein

    setzte vor die Deklaration

    #ifndef TEST_MEINE_VARIABLEN  //Sind die Variablen bereits deklariert?
    #define TEST_MEINE_VARIABLEN  //Nein dann jetzt
    
    int MEINE_VARIABLE;
    
    #endif //Definition beenden
    

    Dies verhindert eine Mehrfachdeklaration!



  • Du könntest es so machen:

    KEINE GLOBALEN VARIABLEN VERWENDEN.
    Es gibt immer eine andere Lösung.



  • ungewöhnlich schrieb:

    setzte vor die Deklaration

    #ifndef TEST_MEINE_VARIABLEN  //Sind die Variablen bereits deklariert?
    #define TEST_MEINE_VARIABLEN  //Nein dann jetzt
    
    int MEINE_VARIABLE;
    
    #endif //Definition beenden
    

    Dies verhindert eine Mehrfachdeklaration!

    Nein, tut es nicht. Das verhindert nur die Mehrfachdefinition innerhalb einer ÜE, aber nicht bei mehreren ÜE.



  • LUZA schrieb:

    ( und, ja, ich habe die vaiable als "extern int" deklariert)

    Dann hast du dabei was falsch gemacht. Das ist nämlich genau der Weg mit dem es tut.

    LUZA schrieb:

    ps: ich poste hier, in diesem forum, weil ich msvc 6.0 benutze...
    könnte ja daran liegen...

    Nein kann es nicht. Verschoben!



  • Dieser Thread wurde von Moderator/in dEUs aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ( und, ja, ich habe die vaiable als "extern int" deklariert)

    sicher, dass du in der header nur "extern int name;" stehen hast und in genau einem Modul "int name;"?



  • aso,

    ungewöhnlich schrieb:

    #ifndef TEST_MEINE_VARIABLEN  //Sind die Variablen bereits deklariert?
    #define TEST_MEINE_VARIABLEN  //Nein dann jetzt
    
    int MEINE_VARIABLE;
    
    #endif //Definition beenden
    

    Dies verhindert eine Mehrfachdeklaration!

    genau so habe ich das gemacht, allerdings mit dem gesamten inhalt der datei,
    so in dem sinne

    #ifndef __MAIN_H
    #define __MAIN_H
    
    //alle prototypen, vars usw...
    
    #endif
    

    is ja, standard...

    __me schrieb:

    ( und, ja, ich habe die vaiable als "extern int" deklariert)

    sicher, dass du in der header nur "extern int name;" stehen hast und in genau einem Modul "int name;"?

    ja, wie ich schon sagte

    extern int nExtern;
    

    hm...



  • LUZA schrieb:

    ungewöhnlich schrieb:

    #ifndef TEST_MEINE_VARIABLEN  //Sind die Variablen bereits deklariert?
    #define TEST_MEINE_VARIABLEN  //Nein dann jetzt
    
    int MEINE_VARIABLE;
    
    #endif //Definition beenden
    

    Dies verhindert eine Mehrfachdeklaration!

    genau so habe ich das gemacht

    Hast du dir die Beiträge überhaupt durchgelesen?
    Nochmal Klartext, in die Header-Datei kommt 'extern typ blabla', und in genau eine! ÜE 'typ blabla'.



  • 3x tief durchatmen...

    1...
    2...
    3...

    wenn du mir jetzt auch noch sags, was eine "ÜE" is, bin ich ja
    schon zufrieden.



  • Übersetzungseinheit



  • Also genau die Dateien, die der Compiler kompiliert (.cpp, .cc, .c, etc.pp).



  • na, dann werd ich dass ma so ausprobieren...



  • Nur um ganz sicher zu gehen:

    // foo.hpp
    
    #ifndef FOO_HPP
    #define FOO_HPP
    
    extern int bar;
    
    #endif
    
    // foo.cpp
    
    #include "foo.hpp"
    
    int bar;
    


  • aso, ich habs ausprobiert...

    wenn ich in EINE üe nochmal "int nExtern" reinschreibe, funktionierts.
    wenn ich aber in mehrere ües "int nExtern reinschreibe, dann gibts wieder einen
    linker-error.

    aso is das so ok, in EINE üe, ine EINE h-file, und nicht mehr???



  • Den Teil ohne extern EXAKT einmal. Der Teil mit extern beliebig oft.



  • gut.

    aso den teil mit extern in jede .cpp,
    und ohne extern in eine .h???



  • umgekehrt ...



  • hört sich n bissn komisch an, abba ok, wenns funzet...

    thx für eure mühe.



  • Mensch das ist doch nicht so schwer Variabeln dürfen nur einmal definiert werden. Wo du das machst ist scheiß egal (außer du pakst es in eine Headerdatei die mehrfach includiert wird -> mehrfach definition) Mit dem Stiwort extern machst du dem Kompiler klar das es irgendwo anders eine Variabel so und so gibt (deklaration) . Wo du sie dann letzendlich definierst ist egal, hauptsache du machst es irgendwo, denn jede Variabel muss auch definiert werden, es reicht nicht sie nur zu deklarieren.


Log in to reply