【发布时间】:2015-11-15 15:19:56
【问题描述】:
所以,我试图在派生类中定义一个枚举,其中声明位于基类中。它看起来像这样:
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();
}
这会起作用(编译器 gcc 4.8,编译命令:g++ -std=c++11 ...)但是我想知道是否有更好的方法来做到这一点,这样我就不必写 E :: 每次我必须使用枚举时。
编辑:我错误地认为这可行,但是,这并不是真正的前向声明,而是两个不同的枚举类 A::E 和 B::E
【问题讨论】:
-
我不必每次必须使用枚举时都写 E:: -- 然后使用旧的
enum而不是enum class。 -
为什么需要在基类中声明?
-
那个前锋有什么作用吗?您声明有一个 A::E,然后您不使用它。这可能与您随后定义的 B::E 无关
-
@sp2danny 是的,看来您是正确的。有哪些方法可以在基类中转发声明枚举并在派生类中定义它?
-
没有,据我所知。类型不是虚拟的。
标签: c++11 enums forward-declaration