undefined reference



  • Folgendes:

    base.hpp

    extern const int var;
    class base
    {};
    

    base.hpp

    #include "base.hpp"
    const int var = 9;
    base::base()...
    

    derived.hpp

    #include "base.hpp"
    class derived : base
    {};
    

    derived.cpp

    #include "derived.hpp"
    derived::derived()
    {
     std::cerr << var << std::endl;
    }
    

    undefined reference to var.

    Aber warum?



  • Schreib extern auch nochmals bei der Definition hin:

    extern const int var = 9;
    

    In C++ besitzen const -qualifizierte, nicht durch extern gekennzeichnete, globale Variablen nämlich standardmässig interne Bindung, also wie bei static . Bei deiner Verwendung von var wird eine Definition mit externer Bindung gesucht, und - weil keine vorhanden ist - nichts gefunden.


  • Mod

    Nexus schrieb:

    Schreib extern auch nochmals bei der Definition hin:

    extern const int var = 9;
    

    In C++ besitzen const -qualifizierte, nicht durch extern gekennzeichnete, globale Variablen nämlich standardmässig interne Bindung, also wie bei static . Bei deiner Verwendung von var wird eine Definition mit externer Bindung gesucht, und - weil keine vorhanden ist - nichts gefunden.

    In diesem Fall haben wir es in base.cpp mit einer Redeklaration von var zu tun. var ist zu diesem Zeitpunkt bereits explizit mit extern deklariert worden und kann nicht nachträglich interne Bindung bekommen, da alle Deklarationen der gleichen Entität die gleiche Bindungsart implizieren müssen. Das Problem dürfte also eher auf fehlerhafte Linkervorgaben zurückzuführen sein.


Anmelden zum Antworten