IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

un souci les namespaces


Sujet :

Langage C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut un souci les namespaces
    Bonsoir à tous
    tout est dans le titre je pense
    j'ai un souci avec un namespace qui dans l'une des fonctions modifie une des variables.
    Secret (cliquez pour afficher)

    Code truc.hpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    // ... avant le nspace
     
    namespace untruc {
      void modifvar () ;
     
      // ... du code ...
     
      int variable ;
    }
     
    // ... après le namespace ...

    Code truc.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    // toujours autant de code ...
     
    namespace untruc {
      void modifvar () {
        untruc::variable = 4444 ; //ou une valeur x
      }
    }
     
    // ... la suite


    Code main.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "untruc.hpp"
    #include <iostream>
     
    int main (void) {
      untruc::modifvar () ;
      std::cout << untruc::variable << std::endl ;
      return EXIT_SUCCESS ;
    }

    ça me créé bel et bien les fichiers (*.o) mais lors de l'édition des liens gcc me sort (je suis sous linux) :

    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    untruc.o:(.bss+0x0): multiple definition of `untruc::variable'
    main.o:(.bss+0x0): first defined here

    merci d'avance pour vos réponses

  2. #2
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Ta variable est clairement défini dans deux unité de compilation. Les variables globales doivent être déclarer une fois, puis récupérer grâce à externe... Mais il y a des approche plus c++(singleton par exemple).

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut
    Citation Envoyé par Lavock Voir le message
    Ta variable est clairement défini dans deux unité de compilation. Les variables globales doivent être déclarer une fois, puis récupérer grâce à externe... Mais il y a des approche plus c++(singleton par exemple).
    Thanx, je vais voir coté singleton
    merci encore

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Il est inutile de coller du singleton à toutes les sauces.
    Si tu as besoin d'une variable globale, alors utilises une variable globale et non un singleton en te disant que tu fais de l'objet ou du C++.
    Lorsque tu écris
    dans un .h, ma_variable est définie autant de fois que le .h est inclus. Syntaxiquement une des solutions est effectivement d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern type ma_variable;
    dans le .h pour déclarer la variable. Ensuite il faut la définir une seule fois dans un seul .cpp :
    Mais, la vraie question est pourquoi tu as une variable globale ? Les variables globales peuvent traduire des erreurs de conception.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Dans 90% des situations je bannis directement le singleton. Je préfère avoir une classe qui va en gérer d'autres, et qui contiendra ce que tu voulais mettre en singleton. Imaginons que j'ai un socket dont je me sers dans plusieurs points du programme. Bah je préfèrerais le mettre dans ma fenêtre principale par exemple, et le donner dans le constructeur des dialogues et autres fenêtres de mon programme afin qu'ils puissent s'en servir.

    Bref, en règle générale, c'est tout simplement une flemme qui mène au singleton, et non pas les bonnes pratiques de design

Discussions similaires

  1. [C#] Les namespaces
    Par Seth77 dans le forum C#
    Réponses: 1
    Dernier message: 23/10/2006, 09h30
  2. [DOM] Problème avec les namespaces
    Par clincks dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/06/2006, 20h40
  3. [VB.NET] Ou importer les namespaces com System.data.. ?
    Par beegees dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/06/2006, 11h06
  4. [.Net] Probleme avec les namespace
    Par ksoft dans le forum MFC
    Réponses: 3
    Dernier message: 07/06/2006, 17h23
  5. Les namespace sont nos amis....
    Par oldfox dans le forum C++
    Réponses: 16
    Dernier message: 23/03/2006, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo