2010-07-07 5 views
0

Dans un en-tête, j'ai une configuration comme celui-ciAccès à un espace de noms ENUM dans un

namespace NS { 
    typedef enum { GOOD, BAD, UGLY }enum_thing; 
    class Thing { 
     void thing(enum_thing elem); 
    } 
} 

et bien sûr un autre fichier cpp qui va de pair avec cet en-tête. Ensuite, j'ai un fichier cpp thread qui contient main(). Dans ce fichier cpp j'utilise cette enum pour passer à la méthode thing().

using namespace NS; 
int main() { 
    Thing t(); 
    t.thing(BAD); 
} 

et bien sûr je reçois d'autres erreurs de G ++ disant BAD n'a pas été déclaré. Toute aide sur comment je pourrais surmonter cette erreur?

+1

il devrait être 'Chose t,' pas 'Chose t()' – smerlin

+0

un 'public:' manque avant que la méthode et un ',' qui manque à la fin de la déclaration de classe, après la clôture '}' . – jdehaan

+0

Et si vous qualifiez complètement l'enum: 'NS :: BAD'. Le compilateur plus ancien n'aime pas ça. typedefing en C++ n'est pas nécessaire dans de tels cas. Ici un enum anonyme est typedef'ed. – jdehaan

Répondre

2

Pouvez-vous éviter d'utiliser un typedef? Il suffit de faire:

enum Foobar {good, bad, hello}; 
+0

Fixé. Merci beaucoup. – SummerCodin

5

Après avoir corrigé de nombreuses petites erreurs de syntaxe dans l'exemple de code, il compile très bien pour moi. Vérifiez que vous avez épelé les noms correctement. Pouvez-vous accéder à l'enum comme NS :: BAD? Peut-être n'avez-vous pas inclus l'en-tête correct? Assurez-vous que vous avez #include "FileWithEnum.h" en haut.

namespace NS { 
    typedef enum { GOOD, BAD, UGLY }enum_thing; 
    class Thing { 
     public: 
      void thing(enum_thing elem){} 
    }; 
} 


using namespace NS; 
int main() { 
    Thing t; 
    t.thing(BAD); 
    return 0; 
} 

Testez-vous: http://codepad.org/Uw0XjOlF

0

Il devrait fonctionner. C'est pour moi (la variante de Mystagogue devrait aussi fonctionner). Je comprends que vous avez eu d'autres messages d'erreur?

Vous devrez probablement corriger l'en-tête pour qu'il soit syntaxiquement correct, comme mettre un point-virgule à la fin de la classe Thing, etc. Lorsque l'en-tête sera OK, le message BAD ne devrait pas disparaître.

Questions connexes