“Node *”类型的C ++链表参数不可复制

时间:2017-02-20 16:19:20

标签: c++ pointers linked-list nodes

我在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 *'

这是为什么?这对我没有意义。

2 个答案:

答案 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*),因此您的编译器会抛出错误。