我对 c++11 的枚举类功能有疑问。一个最小的代码示例是:
template<typename T>
class AClass{
public:
enum class paramNames{
PA = 0,
PB,
PC,
NUM
};
private:
double params[paramNames::NUM];
}
当我想编译一个程序,该程序使用 gcc 时,我收到以下错误消息:
error: 'paramNames' is not a class or namespace double params[paramNames::NUM];
如果有人可以向我解释如何正确使用新的枚举类功能,我将不胜感激。
最佳答案
与旧的enum
不同,没有隐式转换为int
。根据设计,枚举类
无法隐式转换为基础类型。您可以在此处阅读有关其理由的更多信息: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 语言功能,否则执行此操作时会出错。
关于c++ - 枚举类不是类或命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028372/