【问题标题】:Argument incompatible in print linked list - C打印链表中的参数不兼容 - C
【发布时间】:2022-12-08 00:45:19
【问题描述】:

所以我尝试打印一个链表,它说参数头是不兼容的参数类型。 该列表已经正确制作并且如果不放入另一个函数则可以工作。我只是不明白为什么这个特定功能不起作用。

struct data {
    char foodName[FILENAME_MAX];
    int rating;
    float price;
};

typedef struct listElement {
        struct listElement *next;
        struct data food;
        struct listElement *previous;
} listElement;

void printList(listElement *head);
void printElement(listElement *element);

int main()
{
    struct data food;
    listElement head;

    printList(head); <-- this one gets an error

    return 0;
}

void printList(listElement *head)
{
    if (head == NULL) {
        printf("Linked list is empty.\n");
    } else {
        printf("Printing linked list to result file...\n");
        printElement(head);
        printf("Linked list successfully printed to result file.\n");
    }
}

void printElement(listElement *element)
{
    if (element == NULL || file == NULL) {
        return;
    } else {
        printf ("name = %s rating = %d price = %f\n", element->food.foodName, element->food.rating, element->food.price);
        printElement(element->next);
    }

【问题讨论】:

  • 您正在传递 printList 类型为 listElement 的对象,但它期望指针对这样一个对象。这些是不可互换的。
  • 通常你会做printList(&amp;head),如果你想要printList对指针传递的head对象进行操作。然而,在这个程序中head是未初始化的;希望您的实际程序中还有其他代码。
  • head 之前用函数 create List(head) 初始化过,我只是没有显示它,因为我认为它无关紧要而且它有效
  • 如果 head 在使用前被初始化,那么请显示它,因为目前在问题中它不是,因此这是您的代码抛出异常的合法原因。另请显示抛出的异常。

标签: c


【解决方案1】:

在此函数 void printList(listElement *head) 中,您期望指向 listElement 的指针,但在 main 函数中,您使用 listElement 类型而不是 listElement* 类型调用 printList 函数。

要解决这个问题,您必须像这样声明您的head变量listElement* head;,或者您必须给 printList 函数一个指向 head 变量的指针,像这样printList(&amp;head);

无论哪种方式,都取决于您想用它做什么。但第一个建议更常见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多