warum undefined reference im namespace?



  • ich hab folgendes gemacht:

    header-datei mit ner menge forward-declarations:

    namespace hugo
    {
     void egon();
     void balder();
    }
    

    in eine c-datei inkludiert und implementation geschrieben:

    #include "header.h"
    
    void hugo::egon()
    {
     std::cout << "alles nic" << std::endl;
    }
    
    void hugo::balder()
    {
     std::cout << "hts oder?" << std::endl;
    }
    

    aber wenn ich das ganze nun in eine andere datei reinhau und benutz

    #include "header.h"
    
    int main(int tutti, char **frutti)
    {
     hugo::egon();
     hugo::balder();
     return 0;
    }
    

    jammert der linker über undefined references für meine schicken funktionen, obwo hl er das dumme objekt (header.o) doch mitlinkt.

    geht das nicht oder woran liegts?



  • Du musst die Defninition der Funktionen (im cpp-file) auch innerhalb des namespaces machen



  • So gehts:

    #include "header.h"
    
    namespace hugo
    {
      void egon()
      {
       std::cout << "alles nic" << std::endl;
      }
    
      void balder()
      {
       std::cout << "hts oder?" << std::endl;
      }
    }
    

    Mich wundert nur, wie der compiler eine Definition "void hugo::egon()" überhaupt akzeptiert hat. Das definiert die Methode egon() in der Klasse hugo. Und die Klasse hugo gibt es gar ncht 🙄



  • geht interessanterweise immer noch nicht, er moniert immer noch undefined references.

    header.h -> namespace { forward declarations }
    header.cpp -> namespace { implemenation }
    schachtel.cpp -> #include "header.h" ... benutzt eine funktion aus header.h

    und der linker meckert wie gehabt.



  • es geht doch! man sollte nur darauf achten, dass das geändert file auch wirklich neu kompiliert wird 😉


Anmelden zum Antworten