C ++ Plusieurs classes avec le même nom
Dire que j'ai deux fichiers cpp. Déclarer les classes avec le même nom, mais peut-être totalement différente d'une structure (ou peut-être la même structure, mise en œuvre différente). Les classes n'apparaissent pas dans les fichiers d'en-tête. (Par exemple, supposons qu'ils sont le Nœud des classes pour les différents cours.)
J'ai vu ces classes conflit. Est-ce prévu par la norme? Quelles solutions à ce problème?
source d'informationauteur Thomas Eding
Vous devez vous connecter pour publier un commentaire.
Le standard moyen de contourner ce problème consiste à envelopper les classes dans différents les espaces de noms.
Il viole Une Définition De La Règle. Il est difficile pour le compilateur de détecter l'erreur, parce qu'ils sont dans les différentes unités de compilation. Et même de l'éditeur de liens ne peut pas détecter toutes les erreurs.
Voir un exemple dans http://www.cplusplus.com/forum/general/32010/ . Mon compilateur et l'éditeur de liens (g++ 4.2.1) peuvent créer l'exécutable final sans aucune erreur, mais le résultat est mauvais.
Si je change l'exemple un peu, j'obtiens erreur de segmentation.
Il est recommandé de vous différencier par la classe de l'espace de noms. Par exemple de Nœud, vous pouvez utiliser le nid de la classe et de définir le Nœud dans la liste des parents de la classe. Ou vous pouvez ajouter vous classe dans l'espace de noms anonymes. Voir Comment un type qui est utilisé dans une seule unité de compilation, de violer l'Une Définition de la Règle?
Vous pouvez utiliser l'espace de noms à plusieurs classes de même nom par la sous-évaluation dans les différents espaces de noms. Voir: http://www.cplusplus.com/doc/tutorial/namespaces/
Je ne suis pas sûr si je suis absent le détail ici, mais vous envelopper chaque classe dans un
namespace
.Ensuite, vous pouvez utiliser
A::Node
ouB::Node
.La norme dit que vous ne pouvez pas le faire. Ce serait en violation de l'une définition de la règle. (Comment résoudre ce problème a déjà été abordés dans les autres réponses)