我正在尝试做类似以下的事情:
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.
当我尝试编译此代码时,我得到:
52 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h invalid use of undefined type `struct tile_tree_apple'
46 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h forward declaration of `struct tile_tree_apple'
Run Code Online (Sandbox Code Playgroud)
我的代码的一部分:
class tile_tree_apple;
class tile_tree : public tile
{
public:
tile onDestroy() {return *new tile_grass;};
tile tick() {if (rand()%20==0) return *new tile_tree_apple;};
void onCreate() {health=rand()%5+4; type=TILET_TREE;};
};
class tile_tree_apple : public tile
{
public:
tile onDestroy() {return *new tile_grass;};
tile tick() {if (rand()%20==0) return *new tile_tree;};
void onCreate() {health=rand()%5+4; type=TILET_TREE_APPLE;};
tile onUse() {return *new tile_tree;};
};
Run Code Online (Sandbox Code Playgroud)
我真的不知道该怎么做,我搜索了解决方案,但我找不到任何与我的问题相似的东西......实际上,我有更多的课程与父母"瓷砖",这是好的之前... Thanx任何帮助.
编辑:
我决定将所有返回的类型更改为指针以避免内存泄漏,但现在我得到了:
27 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h ISO …Run Code Online (Sandbox Code Playgroud)