首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误C2864:'element::next‘:只有静态const积分数据成员可以在类内初始化(STRUCT)

错误C2864:'element::next‘:只有静态const积分数据成员可以在类内初始化(STRUCT)
EN

Stack Overflow用户
提问于 2018-04-07 15:19:59
回答 3查看 538关注 0票数 0

我对VisualStudio c++编译器有问题。在构造结构时:

代码语言:javascript
运行
复制
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上,一切都很好。我怎样才能解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-07 15:43:58

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

代码语言:javascript
运行
复制
struct element{
  element* next;
  element* prev;

  element{()
    : next(), prev()
  {}
};
票数 0
EN

Stack Overflow用户

发布于 2018-04-07 15:56:27

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

代码语言:javascript
运行
复制
element():next(NULL),prev(NULL) {};

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

代码语言:javascript
运行
复制
struct element{

    element* next;
    element* prev;

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

int value;
}; 

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

票数 0
EN

Stack Overflow用户

发布于 2018-04-07 16:02:44

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

还要避免使用NULL。使用nullptr代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49708846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档