“节点*”类型不可压缩的C++链表参数 我在C++程序中有以下链表。我认为它建造得很好 struct Node { int data; Node* next = NULL; }; void addNode(Node *head, int data); int main() { struct Node { int data; Node* next = NULL; }; Node *head = new Node; head->data = 3; addNode(head, 5); system("pause"); return 0; } void addNode(Node *head, int data) { Node *curr = head; while (curr->next != NULL) { curr = curr->next; } Node *newnode = new Node; curr->next = newnode; }

“节点*”类型不可压缩的C++链表参数 我在C++程序中有以下链表。我认为它建造得很好 struct Node { int data; Node* next = NULL; }; void addNode(Node *head, int data); int main() { struct Node { int data; Node* next = NULL; }; Node *head = new Node; head->data = 3; addNode(head, 5); system("pause"); return 0; } void addNode(Node *head, int data) { Node *curr = head; while (curr->next != NULL) { curr = curr->next; } Node *newnode = new Node; curr->next = newnode; },c++,pointers,linked-list,nodes,C++,Pointers,Linked List,Nodes,首先创建一个节点结构,然后创建一个头部并将其设置为一个新节点。我还设置了head->data=3。然后我调用addNode函数,它接收一个节点*头,本质上是在链表的末尾添加一个节点。但是,当我传入head时,在语句addNodehead,5中,我得到一个错误,说“void addNodeNodeNodeNodeNode*,int”:无法将参数1从“main::Node*”转换为“Node*” 为什么会这样?这对我来说毫无意义。这只是一个一般范围的问题。在addNode函数中,使用的结构节点是在主

首先创建一个节点结构,然后创建一个头部并将其设置为一个新节点。我还设置了head->data=3。然后我调用addNode函数,它接收一个节点*头,本质上是在链表的末尾添加一个节点。但是,当我传入head时,在语句addNodehead,5中,我得到一个错误,说“void addNodeNodeNodeNodeNode*,int”:无法将参数1从“main::Node*”转换为“Node*”


为什么会这样?这对我来说毫无意义。

这只是一个一般范围的问题。在addNode函数中,使用的结构节点是在主节点之前声明的结构节点。但是,main函数中的代码在main…的范围内使用重新定义的struct节点,因此错误为cannotconvert main::Node*to Node*

从main内部删除struct节点的定义,它应该可以工作


此外,在addNode函数中,您没有设置新节点的数据值,因此请确保也这样做。

只需删除以下内容:

struct Node
{
    int data;
    Node* next = NULL;
};
您的问题是,您正在使用不同的范围定义一个单独的类型。编译器认为第一个定义类似于global::Node,而第二个定义是main::Node


所以,实际上,当您将值分配给head时,您分配的是不兼容的类型global::Node*=main::Node*,因此编译器抛出了一个错误。

为什么再次在main中定义Node?当我初始化原型时,它不知道节点是什么时候,所以我必须重新创建结构。初始化原型是什么意思?哪个原型?对于您显示的代码,只需删除main中的定义即可。谢谢。我还有一个任务。节点*头=新节点之间有什么区别;和节点*头=新节点;?它们似乎都可以在括号中调用数据类型的初始化函数或“构造函数”。只要可能,您应该始终初始化变量。否则会导致未定义的行为。要获得更详细的解释,请勾选:我将用一个例子来补充这条评论。假设您有struct Foo{int bar;};,它有一个初始值设定项,在声明foo.bar时将其设置为0。调用x=newfoo会将x->bar的值设置为未定义的值,而调用x=newfoo会每次将x->bar设置为0。