C++11 基类中枚举的正向声明,派生类中的定义
因此,我试图在声明位于基类中的派生类中定义枚举。它看起来像这样:C++11 基类中枚举的正向声明,派生类中的定义,c++11,enums,forward-declaration,C++11,Enums,Forward Declaration,因此,我试图在声明位于基类中的派生类中定义枚举。它看起来像这样: class A { public: enum class E; virtual int foo () = 0; }; class B : public A { public: enum class E { C, D }; int foo () { E e = E::C; return 0; } }; int main() { B b
class A {
public:
enum class E;
virtual int foo () = 0;
};
class B : public A {
public:
enum class E { C, D };
int foo () {
E e = E::C;
return 0;
}
};
int main() {
B b;
A *a = &b;
a->foo();
}
这将起作用(编译器GCC4.8,compile命令:g++-std=c++11…),但是我想知道是否有更好的方法来做到这一点,这样我就不必每次都要使用enum编写E::了
编辑:我错误地认为这是可行的,然而,这并不是一个真正的正向声明,而是两个不同的枚举类a::E和B::E
我想知道是否有更好的方法来实现这一点,这样我就不必每次都使用enum编写E::了
这与远期申报无关。您必须编写E::
,因为您使用的是enum类
如果您不想这样做,请改用旧的
enum
:
class B : public A {
public:
enum E { C, D };
// ...
};
还不完全清楚你想要完成什么。
enum
定义了一个类型,因此每次定义enum
时都定义了一个新类型。这些类型之间没有关系,而类是为数不多的几个有关系的类型之一
那么,如果你有以下两个类
class A {
public:
enum class E {
X,
Y
};
};
class B : public A {
public:
enum class E {
V,
W
};
};
类型
A::E
和B::E
是不同的类型。无论类的层次结构如何,它们之间都没有任何关系。我不必每次都写E::我必须使用枚举——然后使用旧的enum
而不是enum类
。为什么需要在基类中声明?这样做有什么作用吗?您声明有一个a::E,然后您就不用它了。这可能与你当时的B::E无关define@sp2danny是的,看来你是对的。有什么方法可以在基类中前向声明枚举并在派生类中定义它?据我所知,没有。类型不是虚拟的。谢谢您的回答,但是,我如何才能向前声明旧的枚举?我需要forward声明,以便其他派生类可以随意定义E。