globale variablen in statischen bibliotheken



  • wenn man mehrere statische libs zusammenlinkt dürfen ja keine variablennamen gleich sein

    nun sind bei mir aber mehrere gleich(ein paar exzessiv genutzte zeiger auf structs) und die plattform unterstützt auch keine dynamischen libs

    was habt ihr für c++ vorschläge, um den namenskonfikt mit möglichst wenig aufwand loszuwerden (umbenennen einer der variablen is die allerletzte option)



  • namespace ?



  • wie isses da wenn zwei namespaces ne variable mit gleichem namen haben und beide mit using eingebunden werden?



  • namespaces machen keinen sinn wenn man sie einfach alle komplett einbindet (oder wie auch immer man das nennen mag).

    Aber probiers doch einfach mal aus, vieleicht langt es wenn du in konfliktfällen den namespace direkt angibst.



  • dann muss ich aber jede zeile ändern in der der pointer verwendet wird... kommt ner namensänderung gleich

    gibts keine praktischere lösung?



  • namespace N {
      int i;
    }
    
    namespace M {
      int i;
    }
    
    void foo () {
      using namespace M;
      using namespace N;
      i = 10; //Fehler: mehrdeutig
    }
    
    void bar () {
      using M::i;
      using N::i; //Fehler: doppelte Deklaration
    }
    

    So geht's nicht. Allerdings hast du die Möglichkeit, namespaces in jeder Funktion zu einzeln zu öffnen, bzw. einzelne Namen herauszuholen (ist dann wie eine Deklaration)
    Sowas geht zB

    using namespace A;
    
    void fubar () {
      using B::i;
      i = 10;
    }
    

    umgekehrt (Direktive in der Funktion, Deklaration außerhalb) allerdings nicht.
    Namespaces bieten dir auf jedenfall mehr Flexibilität, als Prefixe oder was dir sonst noch für Namensänderungen einfallen.


Log in to reply