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

时间:2018-04-07 15:19:59

标签: c++ 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 :: prev':只能在类中初始化静态const积分数据

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

3 个答案:

答案 0 :(得分:0)

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

struct element{
  element* next;
  element* prev;

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

答案 1 :(得分:0)

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

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

这种情况下的代码:

struct element{

    element* next;
    element* prev;

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

int value;
}; 

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

答案 2 :(得分:0)

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

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