我正在试图编译一个应用程序,它在以下一行中显示了错误:
enum class HoleMaskPixelTypeEnum {HOLE, VALID, UNDETERMINED};我没有使用枚举和class关键字是这样的方式。如果我注释关键字类,则会出现以下错误
error C2864: 'HolePixelValueWrapper<T>::Value' : only static const integral data members can be initialized within a class如下代码所示:
template <typename T>
struct HolePixelValueWrapper
{
HolePixelValueWrapper(const T value) : Value(value){}
operator T()
{
return this->Value;
}
T Value = 0;//error here.
};不知道怎么解决。
发布于 2013-11-07 09:31:19
范围枚举(enum class)和成员变量的类内初始化是一种相当新的语言特性(在C++11中引入);根据this table,前者需要VisualStudio11.0或更高版本,而后者还不受支持。
如果编译器不支持作用域枚举,那么唯一的选择就是删除class。如果不想造成更广泛的污染,可以考虑在类或命名空间中对其进行范围界定。
如果它不支持类内初始化,那么您只需在构造函数中使用老式的方法即可。但是,在这里使用它是没有意义的,因为成员是由唯一的构造函数初始化的。只需删除= 0即可。
发布于 2013-11-07 09:25:14
enum class Blah是一个C++11特性。是否使用C++11编译器进行编译?
发布于 2013-11-07 09:31:10
关于C++11在enum class定义中的使用问题,在描述HolePixelValueWrapper的代码中,您试图在声明类成员Value的相同位置初始化类成员Value,这是不可能的(在C++11中是不可能的),只允许这样初始化静态类成员。删除= 0,它就可以了。
如果您想继续将Value初始化为零,则可以使构造函数的参数在默认情况下具有值,例如(当然,如果它没有破坏您的设计):
HolePixelValueWrapper(const T value = 0) : Value(value){}
https://stackoverflow.com/questions/19832083
复制相似问题