globale Konstanten in namespace
-
Hallo, wieso krieg ich hier nen Linkerfehler?
(Error: Unresolved external 'foo::bar' referenced from C:\TEMP\MAIN.OBJ)foo.hpp:
namespace foo { extern const int bar; }
foo.cpp
namespace foo { const int bar = 25; }
main.cpp
#include "foo.hpp" #include <iostream> int main() { int x = foo::bar; std::cout<<x; return 0; }
danke schon mal
Martin
-
weil const internal linkage impliziert (was der grund ist, warum man sie in header schreiben darf). du müsstest also in foo.cpp die .hpp ebenfalls einbinden.
-
Btw: ein einfaches const int bar = 25; im Header foo.hpp wäre hier völlig ausreichend. Kein Grund extra ein Objekt zu erzeugen.
-
oh mann,
bitte hauts mir mit nem riesen Topf eine auf den Schädel.
Wär da fast dran verzweifelt und dann sowas.
Natürlich muss da ein include reinHumeSikkins schrieb:
Btw: ein einfaches const int bar = 25; im Header foo.hpp wäre hier völlig ausreichend. Kein Grund extra ein Objekt zu erzeugen.
in diesem Fall nicht, aber brauch die Werte in mehreren cpp-Dateien, nicht nur in main.
Jedenfalls danke und sorry für die dumme Frage
-
anonymus schrieb:
HumeSikkins schrieb:
Btw: ein einfaches const int bar = 25; im Header foo.hpp wäre hier völlig ausreichend. Kein Grund extra ein Objekt zu erzeugen.
in diesem Fall nicht, aber brauch die Werte in mehreren cpp-Dateien, nicht nur in main.
Und das ist ein Problem, weil?
Was spricht denn deiner Meinung nach gegen ein
const int bar = 25; in foo.hpp und ein #include "foo.hpp" in jeder ÜE die den Wert von bar benötigt? Warum meinst du du bräuchtest extra ein Objekt?
Benötigst du irgendwo die Adresse von bar?
-
kann mich dran erinnern, dass ich auf diese Weise schon mal nen schönen Fehler erzeugt hab (irgendwas mit mehrfacher Deklaration o. ä.)
Offensichtlich hab ich damals irgendwas falsch gemacht...
=> bin überzeugt
-
Dann waren die Objekte damals nicht const. In dem Fall darf man sie nämlich nicht mehrfach inkludieren. C++-Sprache, schwere Sprache