错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
error C2864: 'element::next' : only static const integral data members can be initialized within a class (STRUCT)
我在使用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++14
或 std=c++17
。对于"可视C++",请指定/std:c++14
或/std:c++latest
。我认为您可以为您的在线学术编译器设置此编译器选项。
也避免使用NULL
.请改用nullptr
。
相关文章:
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- "local scope"中的 C++ 初始化静态变量
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 如何从静态类函数初始化静态类对象
- C++:用IIFE线程初始化静态局部变量安全吗
- 如何在 c++ 中初始化静态类对象?
- 使用 lambda 初始化静态数组
- 使用 lambda 函数初始化静态数据成员
- 如何从 std::integer_sequence 初始化静态数组?
- 在构造函数中初始化静态函数指针
- C - 初始化静态成员的方法
- 大括号使用枚举类初始化静态常量unordered_map
- C++ main 函数中初始化静态变量
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 如何在运行时使用静态成员函数初始化静态成员变量
- 与其他静态const成员初始化静态常量成员