You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链表代码编译报unsigned int转node*等类型转换错误如何解决

问题排查与修正方案

错误原因分析

你遇到的编译报错核心有三类问题:

  1. new运算符使用错误:代码中first = new struct node *(sizeof(struct node));存在两处语法错误:
    • new后跟随的是待分配的对象类型,你额外加了*,导致尝试分配node*指针类型的内存,而非node结构体的内存,返回值类型为node**,和first的node*类型不匹配,触发第二类报错
    • new分配基础/结构体类型内存时会自动计算所需空间,不需要手动传入sizeof值,你把结构体大小作为指针的初始化值传入,触发了unsigned int转node*的第一类报错
      循环中给t分配内存的语句存在完全相同的问题。
  2. Display函数参数类型错误:函数定义的参数为int *p,但调用时传入的是node*类型的全局变量first,且函数内部用.访问指针成员也是错误的,指针访问成员需要用->运算符。
  3. 语法遗漏:main函数中数组A的定义语句末尾遗漏了分号,也会触发编译报错。

修正方案

  • 将所有内存分配语句new struct node *(sizeof(struct node))修改为new struct node
  • 将Display函数的参数改为struct node *p,内部成员访问符从.替换为->
  • 补全main函数中数组定义行末尾的分号

修正后完整代码

#include <iostream>
using namespace std;

struct node
{
    int data;
    struct node *next;
} *first = NULL;

void Create(int A[], int n)
{
    int i;
    struct node *t, *last;
    first = new struct node;
    first->data = A[0];
    first->next = NULL;
    last = first;

    for (i = 1; i < n; i++)
    {
        t = new struct node;
        t->data = A[i];
        t->next = NULL;
        last->next = t;
        last = t;
    }
}

void Display(struct node *p)
{
    while (p != NULL)
    {
        cout << p->data << " ";
        p = p->next;
    }
}

int main()
{
    int A[] = {3, 5, 7, 9, 15};
    Create(A, 5);
    Display(first);
    return 0;
}

内容的提问来源于stack exchange,提问作者Aditya Taware

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:36:03