2011-10-08 103 views
2

我在我的命名空间中有一组类,并且想要在define.hpp文件中对转发声明进行分组。关于强类型的枚举向前声明

我已经在其他项目中实现这一点,这里有一个例子:

namespace Makefile 
{ 
    class Builder; 
    class Config; 
    class Options; 
    class Target; 
    class Tool; 
} 

我的问题是 - 例如 - 在配置类包括下列强类型枚举:

namespace Makefile 
{ 
    class Config 
    { 
    public: 
    enum class OperatingSystem : unsigned int 
     { 
      MacOSX = 0, 
      Linux = 1, 
      Windows = 2 
     }; 
    }; 
} 

所以我想在我的前向声明文件中添加这个枚举类,并添加以下行:

enum class Config::OperatingSystem : unsigned int; 

这里来我的问题,我得到编译时出现以下错误:

src/Makefile/define.hpp:6:13: error: opaque-enum-specifier must use a simple identifier 

这是否意味着它是不可能的前瞻性声明嵌套类型? 有没有解决这个问题的办法? 这是由于我的编译器?

我的配置:GCC 4.6.0在Mac OS十.7

编译标志:--std=c++0x -g3 -gdwarf-2 -W -Wall -iquote gen -iquote src

+2

你永远不能在班级以外的地方宣布班级成员。这与具体的枚举无关。 –

+1

你为什么要把一个'enum class'放入一个类?当我们没有强类型的枚举时,“内部类”技巧就是我们所使用的。像这样访问嵌套枚举的成员需要非常繁琐的名称:'Makefile :: Config :: OperatingSystem :: enum_name“,这似乎是不必要的冗长。 –

回答

5

只需使不透明枚举在平时的地方:

namespace Makefile 
{ 
    class Config 
    { 
    public: 
    enum class OperatingSystem : unsigned int; 
    }; 
} 

然后,无论你想定义枚举常量:

namespace Makefile 
{ 
    enum Config::OperatingSystem : unsigned int 
    { 
     MacOSX = 0, 
     Linux = 1, 
     Windows = 2 
    }; 
} 

错误opaque-enum-specifier must use a simple identifier有没有告诉你,如果你需要用一个简单的标识符来引用枚举,那么你就错了。

UPDATE: 针对您的特殊需求,你可以简单地从它声明的枚举类之外,或者在仅与不透明枚举一个简单的类,并且继承Config

namespace Makefile 
{ 
    class ConfigDecl 
    { 
    public: 
     enum class OperatingSystem : unsigned int; 
    }; 
    class Config : public ConfigDecl; 
}