我正在尝试掌握 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/