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

时间:2013-11-07 09:22:51

标签: c++ class c++11 enums

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

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.
};

不知道解决它。

3 个答案:

答案 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){}