Bonjour,
J'ai régulièrement des message d'erreur de compilation ambiguïté entre windows et word_2K::windows dans les fichiers de la bibliothèque C++
Comment puis je résoudre ces problème sans toucher au framework?![]()
Bonjour,
J'ai régulièrement des message d'erreur de compilation ambiguïté entre windows et word_2K::windows dans les fichiers de la bibliothèque C++
Comment puis je résoudre ces problème sans toucher au framework?![]()
Salut,
De la manière la plus simple qui soit: en bannissant toute utilisation de la directive using namespace (donc, concrêtement, de la directive using namespace word_2k, sans doute)dans ton code, et, principalement, dans les fichiers d'en-tête (car ce point particulier est à considérer comme une erreur monumentale).
Cela t'oblige, il est vrai, à utiliser systématiquement le terme word_2k::windows au lieu de windows, mais cela t'évitera tout risque d'ambiguité: windows s'appliquera à la classe qui ne vient pas de word_2k, et word_2k::windows s'appliquera... à lui-même![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Bonjour
Je retiens ton information
J'ai beaucoup de directive
mais pas -sous réserve de vérification..; en cours -
Code : Sélectionner tout - Visualiser dans une fenêtre à part using namespace std;
il y en a aussi dans le frameword ( des std)
Code : Sélectionner tout - Visualiser dans une fenêtre à part using namespace word_2k;
Bonjour
J'ai trouvé dans le framework
mais pas d'autres
Code : Sélectionner tout - Visualiser dans une fenêtre à part namespace Word_2k
Code : Sélectionner tout - Visualiser dans une fenêtre à part using namespace Word_2k;
Il faut, de manière générale, faire très attention aux directives using namespace...
Déjà, je ne suis pas partisan de leur utilisation dans les fichiers d'implémentation, car elles ont pour résultat de "casser" le but recherché par l'utilisation des espaces de noms:
En effet, les espaces de noms ont, justement, pour but de permettre que que chaque classe définie en leur sein soit identifiée de manière unique, et donc, au final, d'éviter les ambigüités lorsque, pour notre plus grand malheur, deux bibliothèques définissant une classe portant un nom identique, se retrouvent regroupé au sein d'un même fichier.
Lorsque tu utilise la directive using namespace, tu indique d'utiliser ce qui se trouve à l'intérieur de cet espace de noms exactement comme si cela se trouvait dans l'espace de noms global.
Si, du fait de la directive, tu te retrouve avec deux classes portant le même nom qui sont considérées comme se trouvant dans l'espace de noms globlal, tu te retrouve de nouveau face à l'ambigüité, et donc, face à l'obligation d'utiliser le nom "long".
De plus, si tu utilises cette directive dans un fichier d'en-tête, elle va se répandre comme une trainée de poudre par le jeu des inclusions en cascades: si elle se trouve dans le fichier A.h, qui est inclus dans B.h, qui est lui-même inclus dans C.h qui, enfin, est inclus dans C.cpp, la directive sera utilisée de manière invisible pour le lecteur du code de C.cpp...
Au final, je préfères bien souvent utiliser un alias d'espace de noms si, vraiment, le nom complet devient trop long à utiliser plutôt que la directive using namespace![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Bonjour,
J'ai donc retiré cette directive dans 55 fichiers....
Mais j'ai toujours le résultat précédent
3 erreurs de compilation windows::word_2k dans filectrl.hpp
6 erreurs de compilation id° dans comctrls.hpp
Partager