inline klassenfunc im namespace?



  • hi,
    irgendwie krieg ich das nicht hin, eine Klassenmethode außerhalb der Klasse , innerhalb eines user namespaces mit inline zu definieren. Lasse ichs namespace weg, funktioniert das. Geht bei der Verwendung von namespaces nur eine implizite Methodendefinition?

    //file.h
    namespace ha 
    {
     class b 
     {
        public:
          void hu() const;
     };
    };
    //file.cpp
    #include "file.h"
    using namespace ha
    //inline geht hier nich, Funktion is dann nich aufgelöst ?
    void b::hu() const {}
    

    dank im vorraus
    chris



  • using taugt nur etwas, wenn du den Namen verwenden willst. Die Definition muß natürlich wieder im richtigen Namespace angegeben werden:

    namespace ha 
    {
     class b 
     {
        public:
          void hu() const;
     };
    };
    //file.cpp
    #include "file.h"
    namespace ha
    {
      void b::hu() const {}
    }
    


  • hi, es geht so auch nicht, wenn ich eine Methode innerhalb eines namespaces inline definieren will.

    namespace dernamespace {
     inline void klasse::func() 
     {}
    ; //Endnamesp
    

    Der Compiler sagt: 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: long __thiscall ......
    entferne ich inline, ist alles in Ordnung.



  • Erstmal beendet man einen Namespace nicht mit dem Semikolon 😉

    Und zweitens kannst du inline-Funktionen nicht in eigene CPP-Files auslagern (inline sagt dem Compiler, daß er den Quelltext direkt anstelle des Funktionsaufrufes einsetzen soll - aber dazu braucht er den Quelltext dort, wo die Funktion verwendet werden soll)


Anmelden zum Antworten