gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:52:35 26 4
gpt4 key购买 nike

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

代码编译正常。所以我缺少的是 NodeLinkedList 之间的一些交互。这是什么?

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com