枚举类不是类或命名空间

时间:2014-06-04 03:13:28

标签: c++ arrays class c++11 enums

我对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];

如果有人能向我解释,如何正确使用新的枚举类功能,我将不胜感激。

1 个答案:

答案 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语言功能,否则您将会遇到错误。

相关问题