Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 枚举类不是类或命名空间_C++_Arrays_Class_C++11_Enums - Fatal编程技术网

C++ 枚举类不是类或命名空间

C++ 枚举类不是类或命名空间,c++,arrays,class,c++11,enums,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]; } 模板 类AClass{ 公众: 枚举类参数名{ PA=0, PB 个人计算机 全国矿工联盟 }; 私人: 双参数[paramN

我对c++11的枚举类特性有一个问题。最简单的代码示例是:

template<typename T>
class AClass{
public: 
enum class paramNames{
    PA = 0,
    PB,
    PC,
    NUM
};

private:
double params[paramNames::NUM];
}
模板
类AClass{
公众:
枚举类参数名{
PA=0,
PB
个人计算机
全国矿工联盟
};
私人:
双参数[paramNames::NUM];
}
当我想编译一个程序时,它将此程序与gcc一起使用,我得到以下错误消息:

错误:“paramNames”不是类或命名空间双参数[paramNames::NUM]


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

与旧的
enum
不同,没有到
int
的隐式转换。按设计,枚举类不能隐式转换为基础类型。您可以在此处阅读有关该理由的更多信息:。要执行所需操作,需要使用静态强制转换并执行以下操作:

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)];
}
模板
类AClass{
公众:
枚举类paramNames:int{//指定基础类型
PA=0,
PB
个人计算机
全国矿工联盟
};
私人:
双参数[static_cast(paramNames::NUM)];
}

编辑:确保编译器具有可用的c++11语言功能,否则执行此操作时会出错。

与旧的
enum
不同,没有到
int
的隐式转换。按设计,枚举类不能隐式转换为基础类型。您可以在此处阅读有关该理由的更多信息:。要执行所需操作,需要使用静态强制转换并执行以下操作:

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)];
}
模板
类AClass{
公众:
枚举类paramNames:int{//指定基础类型
PA=0,
PB
个人计算机
全国矿工联盟
};
私人:
双参数[static_cast(paramNames::NUM)];
}

编辑:确保编译器具有可用的c++11语言功能,否则执行此操作时会出现错误。

虽然您的注释似乎非常有用,但当我实现代码时,仍然会收到相同的错误消息:enum class paramNames:int{^aclass.hpp:63:33:错误:“paramNames”不是类或命名空间双参数[static_cast(paramNames::NUM)];您使用的是什么版本的gcc,以及您向gcc提供的命令行参数是什么?请确保您可以通过选项
-std=c++11
访问c++11语言功能。尽管编译器标志在警告中显示为默认启用,但它确实起到了作用。非常感谢您的帮助。虽然您的注释似乎非常有用,但当我实现您的代码我仍然会收到相同的错误消息:枚举类paramNames:int{^aclass.hpp:63:33:错误:“paramNames”不是类或命名空间双参数[static_cast(paramNames::NUM)];您使用的是什么版本的gcc以及您向gcc提供的命令行参数是什么?请确保您可以通过选项
-std=c++11
访问c++11语言功能。编译器标志实现了这一点,尽管警告中说默认启用。非常感谢您的帮助。