Bonjour,
Voil�, j'ai un probl�me tout con mais je s�che dessus depuis 50 minutes. J'ai d�clar� une constante statique dans une class :
Selon la spec je devrais avoir le droit de l'initialiser ici directement, cela compile sous gcc 4.3.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 class ItemAttributes { public: /** * Max possible IDF weight. */ static const int MAX_IDF_VALUE = 5; }
Par contre lorsque je veux passer cette constante � une fonction qui mange une r�f�rence, le linker m'envoie un message d'erreur "undefined reference".
Si la variable statique n'est pas utilis�e comme r�f�rence en revanche �a fonctionne...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void SimCalculatorIdf::computeItemsSimWithIdf( const ItemAttributes& leftItem, const ItemAttributes& rightItem, comparisonStats& statForThisType ) const { //(....) //ce code est accepté int matches[ItemAttributes::MAX_IDF_VALUE + 1]; for (int i = 0; i <= ItemAttributes::MAX_IDF_VALUE; i++) matches[i] = 0; //pas celui-ci const int arrayLimit = std::min(ItemAttributes::MAX_IDF_VALUE, totalMatches); //(...) }
J'ai cherch� sur le net, vu diff�rentes solutions, ce serait du � une vieille spec vaseuse que GCC a � tout prix voulu impl�menter correctement, bref.
Donc la solution qui marche serait d'�crire
Utiliser l'op�rateur + pour transformer la constante en lvalue.
Code : S�lectionner tout - Visualiser dans une fen�tre � part +ItemAttributes::MAX_IDF_VALUE
Ou encore utiliser un cast...
Ou finalement, rajouter une d�claration dans le fichier cpp de la classe qui utilise la constante :
Code : S�lectionner tout - Visualiser dans une fen�tre � part (int)ItemAttributes::MAX_IDF_VALUE
Les 2 premi�res solutions ont l'air de vieux hacks, la 3e semble plus juste mais je suis pas s�r de ce qu'elle implique, ni m�me si ma constante vaudra toujours 5...
Code : S�lectionner tout - Visualiser dans une fen�tre � part const int ItemAttributes::MAX_IDF_VALUE;
Si quelqu'un peut m'aider � y voir plus clair...
Partager