我遇到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上一切正常。我该如何解决这个问题?
答案 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++14
或std=c++17
。对于Visual C ++,请指定/std:c++14
或/std:c++latest
。我想你可以为在线学术编译器设置这个编译器选项。
同时避免使用NULL
。请改用nullptr
。