static const floats werden nicht exportiert
-
Servus,
und noch eine merkwürdigkeit auf'm Mac:
class Test{ static const int foo = 4; static const float bar = 200; };Führt auf einem Mac mit gcc 4.0.1 zu einem Linker error: Undefined symbol bar.
Unter linux/windows kein Problem.
Ändere ich den Typ von bar in int, kein linker error mehr.Ist das ein Bug oder ein Feature?
-
Funktionierts, wenn du das hier machst?
static const float bar = 200.0f;
-
PhilippM schrieb:
Ändere ich den Typ von bar in int, kein linker error mehr.
Ist das ein Bug oder ein Feature?
Das ist ein Feature: C++ erlaubt solche direkt initialisierten static-const-Variablen nur für integrale Typen.
Wenn du es beim gcc erlauben willst, lass das Kommandozeilenargument -pedantic weg oder nimm -fpermissive dazu.
-
seit wann ist denn ein float kein integraler Typ??
-
PhilippM schrieb:
seit wann ist denn ein float kein integraler Typ??
integraler == ganzzahliger
Seit wann ist float ganzzahlig?
Grüssli
-
achso. du meinst integer-typ, ich hab "integrierter Typ" (= eingebauter Typ im Gegensatz zu einer selbstdefinierten Klasse) gelesen.
Und warum ist das so?
Gibt's dafür einen Grund?
-
PhilippM schrieb:
Und warum ist das so?
Gibt's dafür einen Grund?Grundsätzlich ist vorgesehen, dass Variablen der Speicherklassen
externundstaticin den CPP-Dateien definiert werden, da im Header ein Linkerfehler (Mehrfachdefinition) entstehen könnte.Bei integralen Typen wurde eine Ausnahme gemacht, damit es möglich ist, die Variable zur Compilezeit zu verwenden. So kann man sie beispielsweise als Grössenangabe für Arrays einsetzen. In der Template-Metaprogrammierung erhält man auf diese Weise auch die Möglichkeit, Informationen zur Compilezeit über Templateparameter weiterzureichen.