globale var. in header-file



  • 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.



  • OK, da muss ich mein Beispiel wohl noch was ausdehnen:

    // foo.hpp
    #ifndef FOO_HPP
    #define FOO_HPP
    
    extern int bar;
    
    #endif
    
    // foo.cpp
    #include "foo.hpp"
    
    int bar;
    
    // blablabla.cpp
    #include "foo.hpp"
    
    void cooleFunktion ()
    {
       bar = 42;  // kann bar verwenden
    }
    
    // main.cpp
    #include "foo.hpp"
    
    int main ()
    {
       bar = 7; // kann bar auch verwenden
    }
    

    Jede Datei, die den Header inkludiert (und somit die extern-Anweisung) kann auf 'bar' zugreifen, das in genau einer ÜE definiert wurde!


Anmelden zum Antworten