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 :
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 :/media/Acer/Users/Neckara/Desktop/Donnees/Projet/Console/Console/logger.cpp:88: undefined reference to `LD::LOGGER_PARAM::taille_buffer'
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_HLa ligne incriminée :
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}; } }
Si je met ceci :
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
Tout fonctionne correctement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part instance[id] = new Logger(LOGGER_PARAM::chemin[id], 50/* LOGGER_PARAM::taille_buffer[id] */);
Plus haut dans le même fichier on trouve :
Le tout étant dans le namespace LD bien sûr.
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]; }
Auriez-vous une idée ?
Merci d'avance,
Neckara
EDIT : j'avais oublier de mettre un const :
Et là il ne trouve plus du tout chemin.const char * const chemin[MAX];
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.
Partager