我正在尝试编译一个在以下行中显示错误的应用程序:
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.
};
不知道解决它。
答案 0 :(得分:7)
成员变量(enum class
)和成员变量的类内初始化是一种相当新的语言特性(在C ++ 11中引入);根据{{3}},前者需要Visual Studio 11.0或更高版本,后者尚不支持。
如果您的编译器不支持作用域枚举,那么唯一的选择是删除class
。如果您不想造成更广泛的污染,您可以考虑在类或命名空间中确定范围。
如果它不支持类内初始化,那么你只需要在构造函数中以老式的方式进行。但是,无论如何都没有必要使用它,因为成员是由唯一的构造函数初始化的。只需删除= 0
。
答案 1 :(得分:3)
enum class Blah
是C ++ 11的一项功能。你在用C ++ 11编译器编译吗?
答案 2 :(得分:0)
关于在enum class
定义中使用C ++ 11的问题,在描述HolePixelValueWrapper
的代码中,您尝试在声明的同一位置初始化类成员Value
它并不可能(不是在C ++ 11中),只允许静态类成员这样初始化。删除= 0
即可。
如果你想将Value
初始化为零,你可以让你的构造函数的参数默认具有值,就像那样(当然如果它没有破坏你的设计) :
HolePixelValueWrapper(const T value = 0) : Value(value){}