namespace - problem... bin am Verzweifeln....



  • ok, hab da ein Problem mit Namespaces, und hab echt kA wo das Problem liegt.... folgendes:

    in der Datei "globals.h" erstelle ich folgenden Namespace:

    #ifndef GLOBALS_H
    #define GLOBALS_H
    
    #include <SDL.h>
    
    namespace blueGFIX
    {
        SDL_Surface* Display;
        int blubb; // nur zu Testzwecken
    }
    
    #endif
    

    und in der main-Funktion will ich auf die Variable zugreifen:

    int main(int argc, char *argv[])
    {
        blueGFIX::Display = initiateVideo(800, 600, 16);
        // ....
    }
    

    der GCC (3.2.2) meldet aber folgendes:

    main.o(.bss+0x0): In function `main': 
    /home/tom/coding/bluegfix/bluegfix/main.cpp:28: multiple definition of `blueGFIX::Display' 
    drawing.o(.bss+0x0): first defined here 
    main.o(.bss+0x4): In function `main': 
    /home/tom/coding/bluegfix/bluegfix/main.cpp:28: multiple definition of `blueGFIX::blubb' 
    drawing.o(.bss+0x4): first defined here 
    collect2: ld returned 1 exit status 
    gmake[2]: *** [bluegfix] Fehler 1
    

    in drawing.o (das aus drawing.h und drawing.cpp besteht) wird aber nie auf den Namespace blueGFIX zugegriffen, lediglich globals.h wird ueber include eingebunden... aber der Namespace ist ja ueber Inclusion-Guards geschuetzt.... 😕

    [ Dieser Beitrag wurde am 14.06.2003 um 18:23 Uhr von Blue-Tiger editiert. ]



  • Original erstellt von Blue-Tiger:
    aber der Namespace ist ja ueber Inclusion-Guards geschuetzt.... 😕

    Eigentlich nicht. Dazu müßten die Include-Guards außerhalb des Namespaces stehen.

    Und Du machst zweimal den gleichnamigen Namespace auf... das innere blueGFIX steht unterhalb des äußeren blueGFIX. Das wird wohl kaum beabsichtigt sein?



  • *g*... das war nur ein kleiner Fehler beim Copy&Paste'n vom Quelltext beim Posten, sry... 😉

    der eigentliche Fehler liegt woanders, leider 😞



  • ich wuerde sagen du verletzt die ODR



  • hmm... gibts da irgend eine Loesung fuer? mir faellt leider ein... 😕

    Wie kann ich das machen, dass ich alle globalen Variablen in einem Namespace hab (wo sie IMO besser aufgehoben sind), und den Namespace in globals.h definier?



  • lies dir bitte Humes FAQ zu ODR durch!

    da steht naemlich die loesung drinnen:

    // OK. Durch das extern ist dies nur eine Deklaration.
    extern int i;

    und in der global.cpp dann

    int i;

    siehe auch dein lieblings C++ zu 'extern'



  • thx a lot 🙂


Anmelden zum Antworten