【问题标题】:error C2864: 'element::next' : only static const integral data members can be initialized within a class (STRUCT)错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态 const 整数数据成员
【发布时间】:2018-04-07 15:19:59
【问题描述】:

我在使用 VisualStudio c++ 编译器时遇到问题。在制作结构时:

struct element{
element* next=NULL;
element* prev=NULL;
char value;
};

编译器显示错误

main.cpp(21) : error C2864: 'element::next' : 只有静态 const 整数数据成员可以在类中初始化

main.cpp(22) : error C2864: 'element::prev' : 只有静态 const 整数数据成员可以在类中初始化

在 LLVM 上一切正常。我该如何解决这个问题?

【问题讨论】:

  • 您使用的是什么版本的 Visual Studio?是在 C++11/14/17 模式下吗?
  • 我在我的在线学术编译器上发送它。我所知道的是它正在使用 VS 编译器。我无法检查它的版本:/
  • 也许这个来自 MSDN 的话题可以帮上忙? msdn.microsoft.com/en-us/library/acxkb76w.aspx
  • MSDN 上的主题显示了静态整数的问题。我的不是静态的。
  • 我只想为元素添加一个构造函数。

标签: c++ struct


【解决方案1】:

除非您可以更改正在使用的 c++ 标准的版本,否则 msvc 将使用无法使用内联初始化的旧行为,您将需要一个默认 ctor。并且由于 MSVC 调试构建行为,您可能需要将这些成员显式初始化为 null。 (在调试版本中,MSVC 默认将许多项目初始化为非零值)。

struct element{
  element* next;
  element* prev;

  element{()
    : next(), prev()
  {}
};

【讨论】:

  • 非常感谢!这是个问题!
【解决方案2】:

如果编译器版本接受它,您可以在构造函数中使用初始化列表。

element():next(NULL),prev(NULL) {};

您在这种情况下的代码:

struct element{

    element* next;
    element* prev;

    element():next(NULL),prev(NULL) {};

int value;
}; 

您也可以尝试使用 nullptr 代替 NULL

【讨论】:

    【解决方案3】:

    您似乎使用过时的 C++ 编译器。使用更新的:对于 g++ 和 clang++,指定 std=c++14std=c++17。对于 Visual C++,请指定 /std:c++14/std:c++latest。我认为您可以为您的在线学术编译器设置此编译器选项。

    同时避免使用NULL。请改用nullptr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多