错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员

error C2864: 'element::next' : only static const integral data members can be initialized within a class (STRUCT)

本文关键字:初始化 静态 常量 STRUCT 整数 数据成员 next element C2864 错误      更新时间:2023-10-16

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

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

编译器显示错误

main.cpp(21(:错误 C2864:"element::next":只能在类中初始化静态 const 整数数据成员

main.cpp(22(:错误 C2864:"element::p rev":只能在类中初始化静态常量整数数据成员

在LLVM上,一切运行良好。如何解决此问题?

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

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

如果编译器版本接受它,则可以改用构造函数中的初始值设定项列表。

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

在这种情况下,您的代码:

struct element{
    element* next;
    element* prev;
    element():next(NULL),prev(NULL) {};
int value;
}; 

您也可以尝试使用 nullptr 而不是 NULL .

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

也避免使用NULL .请改用nullptr