C++ 枚举类不是类或命名空间
我对c++11的枚举类特性有一个问题。最简单的代码示例是: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
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语言功能。编译器标志实现了这一点,尽管警告中说默认启用。非常感谢您的帮助。