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

C++ Discussion :

Les namespaces r�solution de "ambiguous"


Sujet :

C++

  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par d�faut Les namespaces r�solution de "ambiguous"
    Bonjour � tous, suite � une utilisation de windows.h, je me retrouve avec des probl�mes lors des utilisations de using namespace sf; (j'utilise la SFML).

    D'ap�s ce que j'ai compris, si j'ai une fonction Sleep qui traine en dehors de tout namespace et que j'ai une autre fonction Sleep dans le namespace sf, si j'utilise pas using namespace sf, si je ne met pas sf::Sleep(), se sera la fonction windows de Sleep.
    Cependant, si je met using namespace sf, et que je met Sleep(), ce devrait �tre le Sleep windows appel�.

    Je me trompe ?

    Si non, pourquoi avec gcc4.5 en c++0x, ai-je ambiguous function call ? (avec using namespace sf; int main(){Sleep(1);return 0;}

    Si oui, comment faire pour pouvoir utiliser les fonctions SFML sans mettre sf partout tout sans pour autant emp�cher l'utilisation des fonctions windows :
    En effet, les fonctions windows n'�tant dans aucun namespace, on de peut faire windows::Sleep.

    Merci de votre aide.

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    1 299
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 1 299
    Par d�faut
    Salut, je ne connais pas le namespace sf, mais ce que je vais te dire avec le namespace std sera la m�me chose.

    Si tu mets :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    using namespace std;
    using namespace MonNamespace;
    dans ton .cpp, tu pourras avoir une ambiguit�. Exemple, si tu as une fonction std::cout et MonNamespace::cout, quelle fonction faut-il utiliser ?

    C'est pourquoi, je recommande tr�s vivement de ne jamais mettre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    using namespace NomDuNamespace
    mais de mettre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    using NomDuNamespace::fonction1;
    using NomDuNamespace::fonction2;
    du genre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    using std::vector;
    using std::string;
    using std:cout,
    using std::endl;
    Ainsi tes probl�mes d'ambiguit� seront r�solus

  3. #3
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par d�faut
    Je connais bien l'utilit� de using et using namespace. Cependant, dans la majorit� des cas, using namespace est tr�s utile et ne pose pas de probl�me car on peut lever l'ambigu�t� avec namespace::truc.
    Cependant, dans mon cas les fonctions windows.h de sont pas dans un namespace.

    Or , il me semble que m�me si j'ai :

    namespace toto
    {
    void*malloc(size_t);
    };

    avec using namespace toto;
    Il n'y aurait pas de conflit entre malloc(stdlib.h) et mon malloc.
    Pourquoi y en aurait-il dans le cas de windows.h et using namespace sf ?

  4. #4
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par NoIdea Voir le message
    Cependant, si je met using namespace sf, et que je met Sleep(), ce devrait �tre le Sleep windows appel�.

    Je me trompe ?
    Oui. C'est ambigu.

    Si oui, comment faire pour pouvoir utiliser les fonctions SFML sans mettre sf partout tout sans pour autant emp�cher l'utilisation des fonctions windows :
    En effet, les fonctions windows n'�tant dans aucun namespace, on de peut faire windows::Sleep.
    ::Sleep

  5. #5
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par d�faut
    Merci beaucoup, je ne savais pas qu'on pouvais mettre ::Sleep sans namespace avant les ::

    Sujet r�solut.

  6. #6
    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
    Salut,
    Sinc�rement, j'ai du mal � �valuer l'usure du clavier lorsqu'on �crit sf::Sleep...

    D'autant que lorsque plusieurs biblioth�ques sont utilis�es, le code est quand m�me beaucoup plus lisible si on utilise explicitement chaque namespace. Au moins, si on tombe sur un identifiant non connu, on sait vers quelle aide se retourner. Ce qui n'est plus le cas si le namespace est absent.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de donn�es
    R�ponses: 2
    Dernier message: 25/01/2006, 16h10

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