"static const int" geht aber "static const double" nicht
-
Ich habe folgende Header-Datei:
Constants.h#ifndef CONSTANTS_H_ #define CONSTANTS_H_ class Constants { public: static const int numberOfStatisticObjects = 71; //71 Global + IPs static const int numberOfPoissonAttributes = 10; //2; static const int numberOfASNAttributes = 21; //3; //21 (20 + Rest) static const int number30MinIntervals = 48; //3; //48 static const int numberOfDays = 7; //10; //7 static const int scaleFactor = 30; <----------- Ich beziehe mich hierauf static const int number10SecIntervals = 180; //2; //180 static const int numberOfIterations = 1000; //2000 static const int numberSkipIterations = 990; //1000 }; #endif /* CONSTANTS_H_ */Dann in einer Klasse (die natürlich Constants einbindet) steht folgende Codezeile
lambda[j] = 1/((double) Constants::scaleFactor) * poissonAttributesGibbsMatrices[i][0][j] * poissonAttributesGibbsMatrices[i][current30MinIntervalIndex][j];Soweit so gut. Das funktioniert auch wunderbar.
Jetzt habe ich die Constants.h aber mal ein wenig geändert und sie sieht jetzt folgendermaßen aus:
static const double scaleFactor = 30;D.h. ich ersetze einfach int durch double und erhalte dann folgenden Fehler beim Kompilieren:
g++ -lgsl -o DDoS DDoS.o StatisticsObject.o DataProcessor.o RandomNumberGenerator.o AutolartVector.o GibbsSampler.o ASN_Classifier.o DDoS_Main.o
Undefined symbols:
"Constants::scaleFactor", referenced from:
__ZN9Constants11scaleFactorE$non_lazy_ptr in StatisticsObject.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [all] Error 1Wieso geht das nicht?
-
Weil du es in der Source-Datei nicht ebenfalls geändert hast.
Außerdem: 30. anstelle von 30
-
Sorry, ich hatte das schon in 30.0 geändert und es kam/kommt derselbe Fehler. Daran leigt es nicht.
-
Was soll ich denn in welcher Source-File ändern?
-
Eine Initialisierung von statischen Datenelementen einer Klasse ist nur integralen Typen vorbehalten. Warum schreibst Du es nicht so...
namespace constants { const int foo = 42; const double bar = 3.1415; }?
Warum Du hier eine Klasse missbrauchst, ist mir ein Rätsel.
kk
-
krümelkacker schrieb:
Eine Initialisierung von statischen Datenelementen...
genauer: eine "in-class Initialisierung"