Pourquoi le code C++ 11/14 suivant ne fonctionne-t-il pas? Ici, je suis en train de déclarer une énumération dans la classe. L'objectif n'est pas d'avoir une énorme - 100s de valeurs d'enums dans la classe - ce qui rend la classe illisible. Je ne peux pas utiliser une énumération distincte pour cela - pour des raisons politiques.En avant déclarez enum non chiffré dans la classe private
class A {
public:
// forward declare the enum
enum B : int;
void func (B b) {}
};
// The actual declaration
enum A::B : int {
Val1,
Val2,
};
int main()
{
// B is unscoped. so I should be able to use it as below?
int a = A::Val1;
}
erreur de compilation
tmp.cpp: In function ‘int main()’:
tmp.cpp:13:5: error: ‘A::B Val1’ is private
Val1,
^
tmp.cpp:19:16: error: within this context
int a = A::Val1;
^
Mais le code suivant fonctionne:
int a = A::B::Val1;
Juste une pensée: Peut-être parce que le compilateur ne peut pas savoir que 'Val1' n'est pas déclarée dans plus d'un ENUM dans le cadre de' A' ou dérivé classes - et protège contre cette possibilité en le forçant à être privé. – Jeremy