2012-07-11 1 views
0

J'ai une bibliothèque dans une base de code avec quelque chose comme ce qui suit:Suggestion pour résoudre un conflit de nom d'ambiguïté enum?

namespace rat { 

    ... 

    enum myEnum { 
     BLUE, 
     RED 
    } 

    ... 
} //namespace rat 

plus tard que je tente de compiler une application dans le code de base en utilisant la bibliothèque avant et il me met en garde contre une ambiguïté quand je l'utilise rat d'espace de noms (d'un autre fichier que je ne connais pas (et qui ne m'appartient pas) qui a un enq Freq avec un gars appelé BLUE dans l'espace de noms enums dans namespace rat.

Y a-t-il un moyen dans le code d'utilisateur de dire lequel je veux en ce moment? Ou dois-je imbriquer mylibs enum dans say namespace mylib et ensuite dire rat :: enums :: BLUE ou rat :: mylib :: BLUE?

+3

Si vous avez C++ 11, 'enum class' crée une nouvelle portée. – chris

+1

Alors, où avez-vous placé les directives 'using namespace'? Il semble que toutes les plaintes du compilateur sont dans des espaces de noms distincts ('rat',' rat :: enums'). – Chad

+0

Je n'ai pas C++ 11, et et l'application a un rat d'espace de noms utilisant. Cela met en évidence myEnum et enums :: Freq qui contiennent tous les deux BLEU –

Répondre

4

Le nom complet sans équivoque des constantes enum sera ::rat::BLUE, ::rat::enums::BLUE, etc.

Rappelez-vous que le :: au début de l'expression est synonyme de l'espace de noms global .

2

Ce que je fais habituellement en C++ 03 (! Pré C++ 11) est nicher enum s dans struct s, donc ils ne fuient pas:

namespace rat { 
    struct myEnum { 
    enum Enum { 
     blue, red 
    }; 
    }; 
} 

Vous devez définir variables comme rat::myEnum::Enum et des valeurs comme rat::myEnum::blue, mais généralement myEnum devrait être quelque chose de significatif comme Color, de sorte que le nommage n'est pas redondant. Cela émule le C++ 11 class enum d'une certaine manière, vous devriez donc les utiliser si vous avez accès à un compilateur C++ 11.

+0

Bonne suggestion merci! –

Questions connexes