首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum错误:'enum‘:缺少标记名

Enum错误:'enum‘:缺少标记名
EN

Stack Overflow用户
提问于 2013-11-07 09:22:51
回答 3查看 5.5K关注 0票数 4

我正在试图编译一个应用程序,它在以下一行中显示了错误:

代码语言:javascript
复制
enum class HoleMaskPixelTypeEnum {HOLE, VALID, UNDETERMINED};

我没有使用枚举和class关键字是这样的方式。如果我注释关键字类,则会出现以下错误

代码语言:javascript
复制
error C2864: 'HolePixelValueWrapper<T>::Value' : only static const integral data members can be initialized within a class

如下代码所示:

代码语言:javascript
复制
 template <typename T>
struct HolePixelValueWrapper
{
  HolePixelValueWrapper(const T value) : Value(value){}

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

  T Value = 0;//error here.
};

不知道怎么解决。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-07 09:31:19

范围枚举(enum class)和成员变量的类内初始化是一种相当新的语言特性(在C++11中引入);根据this table,前者需要VisualStudio11.0或更高版本,而后者还不受支持。

如果编译器不支持作用域枚举,那么唯一的选择就是删除class。如果不想造成更广泛的污染,可以考虑在类或命名空间中对其进行范围界定。

如果它不支持类内初始化,那么您只需在构造函数中使用老式的方法即可。但是,在这里使用它是没有意义的,因为成员是由唯一的构造函数初始化的。只需删除= 0即可。

票数 8
EN

Stack Overflow用户

发布于 2013-11-07 09:25:14

enum class Blah是一个C++11特性。是否使用C++11编译器进行编译?

票数 3
EN

Stack Overflow用户

发布于 2013-11-07 09:31:10

关于C++11在enum class定义中的使用问题,在描述HolePixelValueWrapper的代码中,您试图在声明类成员Value的相同位置初始化类成员Value,这是不可能的(在C++11中是不可能的),只允许这样初始化静态类成员。删除= 0,它就可以了。

如果您想继续将Value初始化为零,则可以使构造函数的参数在默认情况下具有值,例如(当然,如果它没有破坏您的设计):

HolePixelValueWrapper(const T value = 0) : Value(value){}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19832083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档