59 votes

Mon enum n'est pas une classe ou d'un espace de noms

Salut j'ai des fichiers appelés MyCode.h et MyCode.cpp

Dans MyCode.h j'ai déclaré

enum MyEnum {Something = 0, SomethingElse = 1};

class MyClass {

MyEnum enumInstance;
void Foo();

}; 

Puis dans MyCode.cpp:

#include "MyCode.h"

void MyClass::Foo() {
    enumInstance = MyEnum::SomethingElse;
}

mais lors de la compilation avec g++ j'ai l'erreur 'MyEnum" n'est pas une classe ou de l'espace de...

(fonctionne très bien dans MS VS2010, mais pas linux g++)

Des idées? Merci Thomas

63voto

Max Lybbert Points 11822

La syntaxe MyEnum::SomethingElse est une extension Microsoft. Il arrive à être celui que j'aime, mais ce n'est pas la Norme C++. enum valeurs sont ajoutées à l'environnement de l'espace de noms:

 // header
 enum MyEnum {Something = 0, SomethingElse = 1};

 class MyClass {

 MyEnum enumInstance;
 void Foo();

 }

 // implementation
 #include "MyClass.h"

 void Foo() {
     enumInstance = SomethingElse;
 }

51voto

ildjarn Points 38377

L'étendue des enums n'existe pas tant de C++0x. Pour le moment, votre code doit être

enumInstance = SomethingElse;

Vous pouvez créer une étendue artificielle enum en mettant l'enum de la définition à l'intérieur de son propre espace de noms ou structure.

31voto

gregn3 Points 348

En effet, C++0x permet cette fonctionnalité. J'ai pu l'activer avec succès dans gcc à l'aide de cette option de ligne de commande: -std=c++0x

Ce fut avec gcc version 4.4.5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X