相关疑难解决方法(0)

转发在C++中声明一个枚举

我正在尝试做类似以下的事情:

enum E;

void Foo(E e);

enum E {A, B, C};
Run Code Online (Sandbox Code Playgroud)

编译器拒绝的.我已经快速浏览了一下Google,而且共识似乎是"你做不到",但我无法理解为什么.谁能解释一下?

澄清2:我这样做是因为我在类中使用私有方法来获取枚举,并且我不希望枚举枚举值 - 例如,我不希望任何人知道E被定义为

enum E {
    FUNCTIONALITY_NORMAL, FUNCTIONALITY_RESTRICTED, FUNCTIONALITY_FOR_PROJECT_X
}
Run Code Online (Sandbox Code Playgroud)

因为项目X不是我希望用户了解的东西.

所以,我想转发声明枚举,以便我可以将私有方法放在头文件中,在cpp内部声明枚举,并将构建的库文件和标题分发给人.

至于编译器 - 它是GCC.

c++ enums

257
推荐指数
8
解决办法
18万
查看次数

为什么必须在向前声明时提供枚举的大小?

我只是不明白为什么枚举的大小与编译器相关,而类的大小不是.

我的代码示例:

class A;
enum E;   // must be enum E : int; in order to compile 

void f(const A & param);
void f(const E & param);
Run Code Online (Sandbox Code Playgroud)

我在这里谈论标准C++编译器.我知道MSVC让它编译并正常工作.所以问题是:

为什么这还没有标准化?

c++ enums forward-declaration c++11

20
推荐指数
2
解决办法
1057
查看次数

标签 统计

c++ ×2

enums ×2

c++11 ×1

forward-declaration ×1