namespace und extern



  • Danke fuer die schnelle Antwort,
    sieht gut aus,
    wieder dazu gelernt.

    Gruss CUlli



  • ich klinke mich hier mal mit ein, da ich ein ähnliches problem habe.
    ich habe in zwei verschiedenen headern in jeweils verschiedenen namespaces klassen deklariert. eine der beiden klassen verwendet die andere, allerdings bekomme ich dann fehlermeldungen, wie z.B. das n2 keine klasse oder namespace ist. folgendes Beispiel:

    //header h1.h
    namespace n1
    {
      class c1
      {
        //...
      };
    };
    
    //header h2.h
    #include "h1.h"
    
    namespace n2
    {
      class c2
      {
        void foo(n1::c1 const &src) //hier meckert er, dass "'n1' : is not a class or namespace name"
        {
          //...
        };
        //...
      };
    };
    

    wäre für rat sehr dankbar.
    PS: ohne namespaces hatte es funktioniert, wollte halt der besseren strukturierung und einteilung namespaces einbauen und dann bekomme ich solche fehler 😞
    bei mir sind das auch noch template-klassen, aber das sollte ja nicht das problem sein!?



  • kann es sein, dass dein h1 auch h2 inkludiert, du also eine zirkuläre includebeziehung hast?



  • nein das passiert nicht, darauf hab ich schon geachtet. dann hätte es ja vorher (also ohne namespaces) ja auch nicht funktioniert, würde ich jetzt mal schätzen.



  • ähnlich probleme treten auch bei folgendem auf

    //header h1.h
    //wie oben
    
    //header h3.h
    #include "h1.h"
    
    namespace n3
    {
      class c3 :
        virtual public n1::c1
      {
        //...
      };
    };
    

    könnte es auch probleme geben wenn man namespaces in einander schachtelt?
    also zb.

    //header h0.h
    namespace n0
    {
      namespace n1
      {
        class c1
        {
          //...
        };
      };
    };
    
    //header h4.h
    #include "h0.h"
    
    namespace n4
    {
      class c2 : 
        virtual public n0::n1::c1
      {
        //...
      };
    };
    

    sowas hab ich nämlich auch. da ich ziemlich viel aufeinmal geändert habe, würde ich zumindest gerne ein paar fehlerquellen ausschließen.



  • Bist du sicher, dass du nirgends einen Schreibfehler drin hast?



  • eigentlich schon 🙂
    aber wie ich mich kenne wird irgendwo über 3 ecken wieder ein fehler drin sein, ich mache mal eine schritt für schritt analyse, aller header, etc.. dann wird sich ja zeigen wo der übeltäter sitzt 😃


  • Administrator

    Das einzige Problem, welches mir bei sowas in den Sinn kommt, wenn du wirklich keine zirkuläre Includebeziehung hast, wäre folgendes:

    //header h0.h 
    namespace n0
    {
      class c1
      {
        //...
      };
    }
    
    //header h4.h
    #include "h0.h"
    
    namespace n1
    {
      namespace n0
      {
        // ...
      }
    
      class c2 : virtual public n0::c1
      { 
        //... 
      }; 
    }
    

    n0::c1 würde hier nicht erkennt werden, weil der namespace n1::n0 gemeint würde und somit die Klasse n1::n0::c1 . Abhilfe bei sowas würde das folgende geben: ::n0::c1 . Durch den Globaloperator wird direkt im globalen namespace nach dem namespace n0 gesucht.

    Grüssli



  • also ich habs jetzt hinbekommen, eine zirkuläre "includierung" war es nicht, hatte einfach nur in einigen anderen headern bei klassen aus anderen namespaces diese vergessen mit anzugeben. ich denke mal daran lags, jedenfalls funktioniert jetzt alles. danke trotzdem



  • FreakyBKA schrieb:

    also ich habs jetzt hinbekommen, eine zirkuläre "includierung" war es nicht, hatte einfach nur in einigen anderen headern bei klassen aus anderen namespaces diese vergessen mit anzugeben. ich denke mal daran lags, jedenfalls funktioniert jetzt alles. danke trotzdem

    Da war ich mit meiner Vermutung gar nicht mal so weit weg.. 😉


Anmelden zum Antworten