2009-07-16 5 views
10

J'ai un scénario comme ce qui suit:Accès Namespace parent en C++

class criterion 
{ 
// stuff about criteria... 
}; 
namespace hex { 

    class criterion : public criterion //does not compile 
    {         //This should inherit from the 
    //A hex specific criterion   //criterion class in the global namespace 
    }; 

}; 

Ma question est - comment peut-on hérite d'une classe dans un namspace qui est le parent d'un autre espace de noms?

Billy3

Répondre

7

Commencez par "::"

Par exemple

class criterion : public ::criterion {}; 
12

Vous devez spécifier l'espace de noms, dans ce cas, celui global:

class criterion : public ::criterion 

Remarque que C++ ne spécifie aucun moyen de naviguer dans les espaces de noms comme s'il s'agissait d'un arbre. Par exemple, vous ne pouvez pas spécifier l'espace de noms "parent" en utilisant ".." ou tout autre raccourci - vous devez utiliser son nom.

3

Cette compile pour moi, fondamentalement juste montrer explicitement dans quel espace de noms de la classe parente est:

class A 
{}; 
namespace B { 
    class A : public ::A 
    {}; 
    namespace C { 
     class A : public B::A 
     {}; 
    } 
}; 
1

règles d'espace de noms C++ de base simplifié sont:

  • Vous pouvez accéder à quoi que ce soit dans le chemin d'espace de noms de parent sans spécifiant l'espace de noms.
  • Vous pouvez accéder à n'importe quel élément du chemin de l'espace de noms enfant en spécifiant uniquement le chemin relatif.
  • Tout le reste nécessite des spécifications d'espace de noms complètes.