c++ - 枚举类不是类或命名空间

标签 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 时,我收到以下错误消息:

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/

相关文章:

c++ - 分析使用插件的 Qt 应用程序

c++ - 你能从 C++ 调用 Ada 函数吗?

java - “找不到或加载主类”是什么意思?

c++ - 在 unordered_map 中插入字符串键、值时出错

c++ - 初始化列表和 const& - 这是合法的 C++

php - 如何获取表中每条记录出现的数量

php - JSON 数组到 PHP 日期时间

java - Q 查询后的输出数组将一些元素设置为零

C++ 混淆类以增强引用的局部性?

java - 数据在类之间无法正确传输;结果引发 NullPointerException