2009-06-16 5 views
3

En C++ Est-il possible d'inclure deux fois le même espace de noms? compilateur donnera pas une erreur mais cela affectera de toute façonUtilisation d'un espace de noms deux fois

Merci,

EDIT:
je voulais dire

using namespace std; 

// . . STUFF 
using namespace std; 
+0

veuillez clarifier "inclure deux fois le même espace de noms". Demandez-vous si vous pouvez déclarer "using somenamespace; using somenamespace;" ou demandez-vous si vous pouvez déclarer un espace de noms multiple, comme dans "namespace SomeNamespace {} namespace SomeNamespace {}"? – veefu

+0

Je voulais dire en utilisant l'espace de noms std; . . en utilisant l'espace de noms std; – Uday

+0

Je sais que l'ajout de deux lignes serait stupide. mais si "using namespace std" est fait deux fichiers d'en-tête différents et les deux sont inclus dans le fichier .cpp il y aura un problème – Uday

Répondre

15

Cela dépend de ce que vous voulez dire par 'include'. Dire:

using namespace std;  
...  
using namespace std: 

est OK. Mais dire:

namespace X { 
    ... 
namespace X { 

créerait un espace de noms imbriqué appelé X :: X, ce qui n'est probablement pas ce que vous vouliez.

1

Je ne suis pas tout à fait sûr de ce que vous voulez dire. Vous pouvez placer plusieurs classes dans un seul espace de nom (c'est l'idée complète). Chaque classe a généralement ses propres fichiers, donc oui, vous pouvez utiliser le même espace de noms dans plusieurs fichiers.

Bien que cela ne soit pas techniquement requis, il est recommandé d'avoir une structure de répertoire qui représente la hiérarchie d'espace de noms que vous créez. En ce qui concerne la directive en utilisant la directive: le compilateur et/ou intellisense vous donneront probablement un avertissement (celui du C#), mais sinon il n'y a aucun effet.

3

Deux fois dans la même classe/fichier? Cela ne devrait pas être un problème, mais cela ne devrait pas non plus être nécessaire. Je suppose naïvement que vous devriez être capable de refactoriser votre code pour éviter le problème.

1

Demandez-vous si le suivant est correct? C'est bon mais normalement je préfère faire référence à l'élément d'espace de noms avec une résolution d'étendue.

ex:

std::vector 
std::sort 
8

Cet usage est très bien, si c'est ce que vous parlez:

fichier: foo.h

namespace tools 
{ 
    class Widget 
    { 
    ... 
    }; 
} 

fichier : bar.h

namespace tools 
{ 
    class Gizmo 
    { 
    ... 
    }; 
}