Bonjour,

Je suis actuellement en train de faire une classe "Logger".
J'ai donc fait un singleton pouvant gérer un tableau d'instance de cette classe.
A côté j'ai quelques paramètres qui doivent rester fixe, pour ceci j'utilise des tableau constants.
Mais je suis confronté à un petit problème :
/media/Acer/Users/Neckara/Desktop/Donnees/Projet/Console/Console/logger.cpp:88: undefined reference to `LD::LOGGER_PARAM::taille_buffer'
Or ce que je ne m'explique pas c'est que pour la variable chemin, il n'a aucune difficulté pour trouver sa référence :

Param.h
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
16
17
18
#ifndef PARAM_H
#define PARAM_H
 
 
namespace LD
{
    //[...]
 
    /** @brief Options relative au fichier de log */
    namespace LOGGER_PARAM
    {
        /** @brief nomination des différents fichiers de logs. MAX est le nombre de fichiers de logs connus. Il doit toujours être placé à la fin */
        typedef enum{DEFAULT, MAX}IdLog;
 
    }
}
 
#endif // PARAM_H
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
16
17
18
19
20
//param.cpp
#include "Param.h"
 
 
namespace LD
{
    //....
 
    /** @brief Options relative au fichier de log */
    namespace LOGGER_PARAM
    {
 
        /** @brief donne les chemins où écrire les différents fichiers de logs */
        const char * chemin[MAX] = {"erreur.log"};
 
 
        /** @brief donne les tailles des buffers pour les différents fichiers de logs */
        const int taille_buffer[MAX] = {500};
    }
}
La ligne incriminée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
instance[id] = new Logger(LOGGER_PARAM::chemin[id], LOGGER_PARAM::taille_buffer[id]);
//par contre aucun problème avec chemin
Si je met ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
instance[id] = new Logger(LOGGER_PARAM::chemin[id], 50/* LOGGER_PARAM::taille_buffer[id] */);
Tout fonctionne correctement...

Plus haut dans le même fichier on trouve :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    namespace LOGGER_PARAM
    {
        extern const char * chemin[MAX];
        extern const int taille_buffer[MAX];
    }
Le tout étant dans le namespace LD bien sûr.

Auriez-vous une idée ?

Merci d'avance,
Neckara

EDIT : j'avais oublier de mettre un const :
const char * const chemin[MAX];
Et là il ne trouve plus du tout chemin.
J'ai donc essayé d'enlever le const pour taille_buffer et tout d'un coup il arrive à le trouver...

Donc pourquoi est-ce que de mettre ou de ne pas mettre une variable en constante fait qu'il ne la trouve plus lors de l'édition de lien?
Je précise que j'ai bien répercuté chaque modifications sur la déclaration de la variable en extern et sur la "vrai" déclaration de la variable.