枚举错误:'枚举':缺少标记名称

Tab*_*Tab 2 c++ enums class c++11

我正在尝试编译一个在以下行中显示错误的应用程序:

enum class HoleMaskPixelTypeEnum {HOLE, VALID, UNDETERMINED};
Run Code Online (Sandbox Code Playgroud)

我没有使用枚举是这样的方式与class关键字.如果我评论关键字类,则会发生以下错误

error C2864: 'HolePixelValueWrapper<T>::Value' : only static const integral data members can be initialized within a class
Run Code Online (Sandbox Code Playgroud)

这是以下代码:

 template <typename T>
struct HolePixelValueWrapper
{
  HolePixelValueWrapper(const T value) : Value(value){}

  operator T()
  {
    return this->Value;
  }

  T Value = 0;//error here.
};
Run Code Online (Sandbox Code Playgroud)

不知道解决它.

Mik*_*our 7

Scoped enumerations(enum class)和成员变量的类内初始化是一个相当新的语言特性(在C++ 11中引入); 根据此表,前者需要Visual Studio 11.0或更高版本,后者尚不支持.

如果您的编译器不支持作用域枚举,那么唯一的选择是删除class.如果您不想引起更广泛的污染,您可以考虑在类或命名空间中确定范围.

如果它不支持类内初始化,那么你只需要在构造函数中以老式的方式进行.但是,无论如何都没有必要使用它,因为成员是由唯一的构造函数初始化的.只需删除= 0.