Bonjour,
Je rencontre un petit problème de namespace, c'est une notion que je ne maîtrise pas totalement. J'y vois un intérêt, particulièrement pour faire des variable pseudo globales aux classes que je crée qui ont des liens entre elles. Par contre, je rencontre souvent des problèmes de déclaration et de définition de variable en tout genre à en m'arracher les cheveux.
En l'occurence en ce moment.
Grosso modo, j'ai une classe Bouton qui est spécifique à mon application et qui est donc utilisée dans la fenêtre de mon application. Cette application fait partie d'un groupe d'application qui ont un lien entre elles. J'utilise des namespace qui traduisent ces relation et cela me donne :
MyWindow.h
[code]
#include ....
namespace Group{
namespace MyApp{
class MyWindow{
MyWindow();
}
}
}
[/code]
MyWindow.cpp
[code]
#include "MyWindow.h"
#include ....
#include "MyButton.h"
namespace Group{
namespace MyApp{
MyWindow::MyWindow(){
/* création de mon interface utilisant des Group::MyApp::MyButton */
MyButton *boutonOK=new MyButton("Ok");
}
}
}
[/code]
MyButton.h
[code]
#include ....
namespace Group{
namespace MyApp{
class MyButton{
MyButton();
}
}
}
[/code]
MyButton.cpp
[code]
#include ....
#include "MyButton.h"
namespace Group{
namespace MyApp{
MyButton::MyButton(){
/* Création de mon bouton de type Group::MyApp::MyButton */
}
}
}
[/code]
Main.cpp
[code]
#include ....
#include "MyWindow.h"
using namespace Group::MyApp;
int main(){
MyWindow* window=new MyWindow();
}
[/code]
Tout ça, mis à part erreurs possibles car création de l'exemple un peu vite fait
Mais je pense que ça, ça fonctionne grosso modo.
Maintenant je voudrais définir une variable "globale" dans l'espace de nom Group::MyApp qui doit être utilisée dans les deux classes. Genre par exemple, une variable qui serait modifiée par l'utilisateur à l'aide de l'interface (check box ou autre) et qui conditionnerait le comportement de mes boutons. Je déclare donc cette variable dans le namespace anonyme de mon namespace Group::MyApp. Cette variable sera donc accessible par MyWindow et MyButton facilement.
La question est, où dois-je le faire, où puis-je l'initialiser... comment pourquoi ????. j'ai essayé en la mettant dans le MyWindow.h.
MyWindow.h
[code]
#include ....
namespace Group{
namespace MyApp{
namespace{
Bool MyConditionalVariable;
}
class MyWindow{
MyWindow();
}
}
}
et
MyButton.cpp
[code]
#include ....
#include "MyButton.h"
namespace Group{
namespace MyApp{
MyButton::MyButton(){
/* Création de mon bouton de type Group::MyApp::MyButton */
if(MyConditionalVariable){.....}
}
}
}
[/code]
Il échoue à la compilation quand j'essaie d'utiliser MyConditionalVariable dans le fichier MyButton.h car MyConditionalVariable n'est pas déclarée, first use in function MyButton::MyButton()....
Si je lui précise Group::MyApp::MyConditionalVariable, il me dit qu'elle n'est pas membre de Group::MyApp. Si je déclare MyConditionalVariable dans le fichier MyButton.h, c'est en compilant MyWindow.h qu'il me crache dessus.
Bref, comment doit-on s'y prendre pour que les variables déclarée dans un namespace dans un des fichierssoit réellement globale à tout le namespace.
Peut-être faut-il rajouter des usin namsepace un peu partout ? je ne sais pas....
Merci
Hervé
L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"