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 :

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;
}
Selon la spec je devrais avoir le droit de l'initialiser ici directement, cela compile sous gcc 4.3.

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
Code : S�lectionner tout - Visualiser dans une fen�tre � part
+ItemAttributes::MAX_IDF_VALUE
Utiliser l'op�rateur + pour transformer la constante en lvalue.

Ou encore utiliser un cast...

Code : S�lectionner tout - Visualiser dans une fen�tre � part
(int)ItemAttributes::MAX_IDF_VALUE
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
const 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...

Si quelqu'un peut m'aider � y voir plus clair...