我对c ++ 11的枚举类功能有疑问。一个最小的代码示例是:
template<typename T>
class AClass{
public:
enum class paramNames{
PA = 0,
PB,
PC,
NUM
};
private:
double params[paramNames::NUM];
}
当我想编译一个程序时,它使用gcc我的程序,我得到以下错误信息:
错误:'paramNames'不是类或命名空间double params [paramNames :: NUM];
如果有人能向我解释,如何正确使用新的枚举类功能,我将不胜感激。
答案 0 :(得分:4)
与旧enum
不同,没有隐式转换为int
。按设计enum class
无法隐式转换为基础类型。您可以在此处详细了解相关理由:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf。要做你想做的事,你需要使用静态演员,并做这样的事情:
template<typename T>
class AClass{
public:
enum class paramNames: int{//specify the underlying type
PA = 0,
PB,
PC,
NUM
};
private:
double params[static_cast<int>(paramNames::NUM)];
}
编辑:确保您的编译器具有可用的c ++ 11语言功能,否则您将会遇到错误。