c++ - 将指向类的指针设置为 0 时出现错误 : does not name a type,

标签 c++ c++11

我正在尝试掌握 C++ 的基础知识,但我被这段代码困住了:

#include<iostream>

using namespace::std;

class Node
{
public:
  int x;
  Node *ptr_next;

};

class LinkedList
{
public:
  Node *head;
  head = 0; //If I comment out this line the code compiles
};

int main()
{
  LinkedList linked_list;
  return 0;
}

当我运行上面的代码时,我收到此错误:

error: ‘head’ does not name a type

我不明白为什么我不能将head设置为0;我看了this question似乎上述错误的可能原因是编译器不知道引用的类(在我的例子中 Node 是什么)。但是,这里的情况不应该是这样,因为如果我只是将 head 声明为指向 Node 的指针,我的代码就可以正常运行。当我尝试将 head 设置为 0 时,会引发上述错误。我错过了什么?

如果我忽略 LinkedList 类,并将 main 更改为:

int main()
{
  Node *head;
  head = 0;
  return 0;
}

代码编译良好。所以我缺少的是 Node 和 LinkedList 之间的一些交互。它是什么?

最佳答案

C++11 允许在类中初始化非静态数据成员;这在标准中被称为“brace-or-equal-initializer”。初始值设定项必须出现在数据成员的声明中。但您试图在单独的语句中初始化它。将代码更改为

class LinkedList
{
public:
  Node *head = nullptr; // don't use 0 to initialize pointers
};

并且,正如名称 brace-or-equal-initializer 所暗示的那样,初始化也可以使用 braced-init-list 来完成。所以下面的方法也有效

class LinkedList
{
public:
  Node *head{};  // value-initializes the pointer
};

关于c++ - 将指向类的指针设置为 0 时出现错误 : does not name a type,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24354566/

相关文章:

C++:为什么这个简单的 Scope Guard 有效?

c++ - 如何在 C++ 中生成以下排列树?

c++11 信号系统

c++ - 使用求解器 SparseLU 并出现错误 C2664

c++ - 模板化隐式类型转换运算符

c++ - 将 C++11 async/futures 与 Windows 异步 IO 相结合的最佳 API 是什么?

c++ - 如何在 C++ 中将十六进制数字转换为二进制?

c++ - 具有 std::minmax 和右值的结构化绑定(bind)

c++ - MFC 文档模板中的共享处理程序预处理器指令

C++0x 3d map 像 php 关联数组一样初始化