我的命名空间中有一组类,并且希望将前向声明分组到 Define.hpp 文件中。
我已经在其他项目中实现了这一点,这是一个示例:
namespace Makefile
{
class Builder;
class Config;
class Options;
class Target;
class Tool;
}
我的问题是 - 例如 - Config 类包含以下强类型枚举:
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
这是否意味着无法前向声明嵌套类型? 这个问题有什么解决办法吗? 这是由于我的编译器造成的吗?
我的配置:Mac OS X.7 上的 GCC 4.6.0
编译标志:--std=c++0x -g3 -gdwarf-2 -W -Wall -iquote gen -iquote src
最佳答案
您只需在通常的位置创建不透明枚举即可:
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必须使用简单标识符
是告诉您,如果您需要使用简单标识符以外的其他方式引用枚举,那么您就做错了。
更新:
根据您的特定需求,您可以简单地在类外部声明枚举,或者在仅包含不透明枚举的简单类中声明枚举,并从中继承 Config
:
namespace Makefile
{
class ConfigDecl
{
public:
enum class OperatingSystem : unsigned int;
};
class Config : public ConfigDecl;
}
关于c++ - 关于强类型枚举前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7698775/