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
externauch nochmals bei der Definition hin:extern const int var = 9;In C++ besitzen
const-qualifizierte, nicht durchexterngekennzeichnete, globale Variablen nämlich standardmässig interne Bindung, also wie beistatic. Bei deiner Verwendung vonvarwird eine Definition mit externer Bindung gesucht, und - weil keine vorhanden ist - nichts gefunden.
-
Nexus schrieb:
Schreib
externauch nochmals bei der Definition hin:extern const int var = 9;In C++ besitzen
const-qualifizierte, nicht durchexterngekennzeichnete, globale Variablen nämlich standardmässig interne Bindung, also wie beistatic. Bei deiner Verwendung vonvarwird 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.