【问题标题】:Passing a Linked List (incompatible pointer type error)传递链接列表(不兼容的指针类型错误)
【发布时间】:2021-04-07 16:26:57
【问题描述】:

当我尝试调用应该初始化我的链表的函数时出现以下错误。

 passing argument 1 of 'init_list' from incompatible pointer type [-Wincompatible-pointer-types]
  init_list(list); 

我不明白为什么会收到此错误。这是我第一次使用链接列表,因此感谢您的帮助。 以下是我如何设置我的链表以及我的函数原型:

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

typedef char DATA_TYPE;


typedef struct node_t
{
    DATA_TYPE item;
    struct node_t* next;
} node;

typedef struct
{
    node* head;
    int len;
} linkedlist_t;

void init_list(linkedlist_t* plist);

这是函数:

void init_list(linkedlist_t* plist)
{

    plist->head = (node *)malloc(sizeof(node));
    plist->head->next = NULL;
    plist->len = 0;
}

这就是我在main 中调用函数的方式。


#include "linkedlist.h"

int main(void) {


    node list;

    init_list(&list);


    return 0;
}

【问题讨论】:

  • node list;?这不是一个列表。
  • init_list 想要linkedlist_t* 对象而不是node* 对象

标签: c linked-list


【解决方案1】:

您正在传递一个node,而您的函数需要一个linkedlist。这两个对象不兼容,因为node 只是linkedlist 的一部分。

如果您的 init_list 函数仅初始化 node 部分,那么您应该将签名更改为期待 node ,也可以将其重命名为 init_node ,这将使代码更易于读者理解.

void init_node(node *plist);

否则将列表更改为linkedlist 类型。

linkedlist_t list;

init_list(&list);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多