我在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;
}
首先我创建一个节点结构,然后创建一个head
并将其设置为new Node.
我也只是设置head->data = 3
。然后我调用我的addNode
函数,该函数接收Node * head
,并且实质上将一个节点添加到链表的末尾。但是,当我传到头部时,在addNode(head, 5)
语句中,我收到错误提示'void addNode(Node *,int)': cannot convert argument 1 from 'main::Node *' to 'Node *'
这是为什么?这对我没有意义。
答案 0 :(得分:1)
这只是一个普遍的范围问题。在addNode
函数中,正在使用的struct Node
是在main()
之前声明的main
。但是,struct Node
函数内的代码使用main
范围内的重新定义的cannot convert main::Node* to Node*
...因此错误说struct Node
。
从main
内删除addNode
的定义,它应该有效。
此外,在Node
功能内部,您无法设置新mex -v foldin.c -lmwlapack -lmwblas
的数据值,因此请务必同时执行此操作。
答案 1 :(得分:0)
只需删除以下内容:
struct Node
{
int data;
Node* next = NULL;
};
您的问题是您正在定义具有不同范围的单独类型。您的编译器认为第一个定义类似于global::Node
,而第二个定义是main::Node
。
因此,实际上,当您为head分配值时,您将分配不兼容的类型(global::Node* = main::Node*
),因此您的编译器会抛出错误。