begin process at 2012 05 29 21:31:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Problème de namespace


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de namespace

vendredi 20 février 2009 à 23:19:23 | Problème de namespace

RV2931


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"
samedi 21 février 2009 à 05:58:35 | Re : Problème de namespace

RV2931

Bon en fait j'ai résolu le problème de la même manière que j'ai utilisé en C#

j'ai créé un namespace indépendant dans un fichier.h indépendant que j'inclus dans les différents fichiers ou j'utilise les variables globales. ça fonctionne très bien. C'est plus propre en utilisant que des variables statiques...

myglobals.h
namespace MyGlobals{
      static Bool MyConditionalVariable;
}


 #include "myglobals";

MyGlobals::MyConditionalVariable; //accès simple aux variables globales... un petit using namspace MyGlobals éventuellement, et se sont de véritable vairable globales...

ça crée quelques messages de warning disant que les variables sont définies mais pas utilisée dans les fichiers où effectivement, elles ne sont pas utilisées, mais je préfère ça, c'est bcp moins prise de tête, à ce demander si c'est possible de faire autrement.

Merci quand même
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"
samedi 21 février 2009 à 16:40:51 | Re : Problème de namespace

RV2931

Bon ben en fait ça n'a pas l'air de fonctionner non plus.

Il me semble qu'il crée autant de variable différente que je fasse d'include de "MyGlobals.h" car j'ai créé un QMap<QString,int> dans mon espace de nom MyGlobals et dans le fichier ou je la remplie, j'y accède sans problème à toutes les valeurs, mais quand je veux y accéder d'un autre fichier (avec un #include entre temps), en asynchrone, la QMap (tableau associatif en Qt)  est vide

Est-ce normal que malgré le #ifndef #define il me fasse ce genre de truc ??

Merci
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"
samedi 21 février 2009 à 16:55:54 | Re : Problème de namespace

RV2931

Et en utilisant des extern patati patata ???

j'ai essayé de déclarer :
extern QMap<QString,int> MyGlobals::MyMap;

mais il me crie dessus parce que MyGlobals n'a pas été déclaré... peut-on déclaré un namespace en externe, genre extern namespace MyGlobals; ????
ou peut-être la solution serait de faire exactement comme en C#, crée une classe dans l'espace de nom MyGlobals, une véritable classe, mais avec que des attributs statics.
Cela fonctionnerait peut-être mieux que déclarer des attributs statiques dans un namespace. Namespace qui me semble apparemment limités au fichier dans ce cas là.

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"


Cette discussion est classée dans : group, namespace, myapp, mybutton, mywindow


Répondre à ce message

Sujets en rapport avec ce message

c++ .Net [ par yafuka ] Bonjour à tous !!ben voila je me lance dans le c++ .Net . en essayant de compiler mon 1er prog j ai l erreur prog1 fatal error LNK1561: entry point mu using namespace? [ par seito ] [size=5] seito [/size]s'il vous plait est ce que quelqu'un peut m'éclairer sur ce que ça veut dire "using namespace" et à quoi ça sertmerci namespace ou espace de nom [ par mat74 ] salut a ts je cherche comment definir et utiliser les namespace .merci d'avance @+ namespace [ par magic_Nono ] j'ai modifié mes classes n'étant jamais instanciées en namespaceet j'ai quelques intérogations :1>dans le header, pkoi le static ne passe pas ex : st namespace [ par thierry la fronde ] Pour augmenter ma culture :A quoi sert le namespace (MFC) et comment déclarer une fonction dans ce champs pour que mon MainFrame puisse appeler cette pb lors du passage de .rc dev C++ a ms VC++ [ par izle ] Salut,j'ai un probleme, j'utilise habituelement dev C++ mais pour un cours orienter interface graphique je dois utiliser ms visual C++,le probleme est Multicast et socket [ par r_ik ] Salut a tous !J' ai une petite question pour une ame charitable !Je cherche a programmer une appli multicast, je me suis doncdocumenté et j ai compris grouper dans une listview... [ par youpiyoyo ] je m'apercois ke peux de gens l'on codé en c++ mais bon j'aurais besoin de faire cela...j'ai deja poser la kestion dans un autres thread, et je pense BS_GROUPBOX ??? [ par SnOOpss ] bonjour je suis en train de me refaire des classes pour les dialogs et je butte sur les group box ( le cadre )!Impossible de changer leur couleur alor Rendre inactifs tous les radio boutons d'une Group Box apres avoir cliqué sur l'un des radio boutons. VC++ [ par ninouch ] J'ai crée une group Box dans laquelle j'ai mis 6 radio boutons.Ils fonctionnent très bien mais j'aimerais les rendre inactifs dès que l'on a cliqué su


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales