我对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上,一切都很好。我怎样才能解决这个问题?
发布于 2018-04-07 15:43:58
除非您可以更改正在使用的c++标准的版本,否则msvc将使用不能使用内联初始化的旧行为,您将需要一个默认的ctor。而且,由于MSVC调试构建行为,您可能需要显式地将这些成员初始化为null。(在调试版本中,MSVC默认将许多项初始化为非零值)。
struct element{
element* next;
element* prev;
element{()
: next(), prev()
{}
};发布于 2018-04-07 15:56:27
如果编译器版本接受它,则可以在构造函数中使用初始化程序列表。
element():next(NULL),prev(NULL) {};在这种情况下,您的代码:
struct element{
element* next;
element* prev;
element():next(NULL),prev(NULL) {};
int value;
}; 您也可以尝试使用nullptr而不是NULL.。
发布于 2018-04-07 16:02:44
您似乎使用了过时的C++编译器。使用一个更新的:对于g++和clang++,指定std=c++14或std=c++17。对于VisualC++,请指定/std:c++14或/std:c++latest。我认为您可以为您的在线学术编译器设置此编译器选项。
还要避免使用NULL。使用nullptr代替。
https://stackoverflow.com/questions/49708846
复制相似问题