结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?
Posted
技术标签:
【中文标题】结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?【英文标题】:structure not created for Node but at time of initializing a node if we write struct before it ,the code is working fine, No Errors.Why?结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为什么? 【发布时间】:2021-11-27 20:33:46 【问题描述】:class Node
public:
int value;
Node *next;
;
class LinkedList
private:
Node *head;
public:
LinkedList(void) head = NULL;
~LinkedList(void);
void insertAtHead(int);
void insertAtLocation(int, int);
void Delete(int);
void displayList();
int countList();
;
void LinkedList::insertAtHead(int new_value)
struct Node *newNode, *NodePtr = head;
newNode = new Node;
newNode->value = new_value;
newNode->next = NULL;
if (!head)
head = newNode;
else
newNode->next = NodePtr;
head = newNode;
cout << "Node successfully inserted at the head\n\n";
我没有为节点创建任何结构,而是为它创建了一个类。但是我不知道为什么当我通过在初始化开始时编写 struct 在 insertAtHead 函数中创建一个 newNode 时我的代码正常工作,那里发生了什么?不,在 Node.js 之前编写结构时编译和运行时错误。这项工作背后的理念是什么?
【问题讨论】:
我把它写成有趣。看起来 C++ 编译器完全忽略了struct Node *newNode, *NodePtr = head;
中的struct
。它不是必需的,因此编译器似乎只是读取它并将其放入“无关紧要”中。堆。
【参考方案1】:
struct
和 class
之间没有与此代码相关的区别。因此,您可以随意切换它们而不会产生任何后果。
【讨论】:
【参考方案2】:这个
struct Node *newNode, *NodePtr = head;
是 C 主义。在 C++ 中,你会写:
Node *newNode, *NodePtr = head;
此外,结构是 C++ 中的一个类。 struct
和 class
只是两个不同的关键字。仅对于默认访问,它们在用于定义类时会有所不同。有关详细信息,请参见此处:When should you use a class vs a struct in C++?。
【讨论】:
以上是关于结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?的主要内容,如果未能解决你的问题,请参考以下文章