2010-11-01 35 views
13

Disons que j'ai une classe appelée « foo » dans l'espace de noms « abc » ...classes et namespaces partageant le même nom en C++

namespace abc { 
    class foo { 
     int a; 
     int b; 
    }; 
} 

... puis dire que j'ai une autre classe appelée « abc "dans un espace de noms différent

#include "foo.h" 

namespace foo { 
    class abc { 
     abc::a = 10; 
    }; 
} 

abc :: un ne serait pas un type défini, car il serait à la recherche de classe abc, non namespace abc. Comment est-ce que je ferais correctement référence à un objet dans un autre espace de noms, dans lequel cet autre espace de noms avait le même nom que la classe dans laquelle je suis?

Répondre

22

Vous pouvez utiliser ::abc::xx, c'est-à-dire identifier la variable ou le type en tant que chemin d'accès absolu à son espace de noms. Si vous ne spécifiez pas de nom absolu, les noms relatifs commencent à monter dans les espaces de noms/classes inclus.

+0

Première réponse! Merci tout le monde! – Monster

6

Vous pouvez utiliser un préfixe :: pour désigner à partir de l'espace de noms global, donc dans votre cas ::abc indiqueraient l'espace de noms abc de votre premier extrait de code.

5

Vous pouvez spécifier un nom complet à partir de :: qui définit l'espace de noms global, .: par exemple

namespace abc { 
    class foo { 
     int a; 
     int b; 
    }; 
} 

namespace foo { 
    class abc { 
     ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile 
    }; 
}