C++链表代码编译报unsigned int转node*等类型转换错误如何解决
问题排查与修正方案
错误原因分析
你遇到的编译报错核心有三类问题:
- new运算符使用错误:代码中
first = new struct node *(sizeof(struct node));存在两处语法错误:- new后跟随的是待分配的对象类型,你额外加了
*,导致尝试分配node*指针类型的内存,而非node结构体的内存,返回值类型为node**,和first的node*类型不匹配,触发第二类报错 - new分配基础/结构体类型内存时会自动计算所需空间,不需要手动传入
sizeof值,你把结构体大小作为指针的初始化值传入,触发了unsigned int转node*的第一类报错
循环中给t分配内存的语句存在完全相同的问题。
- new后跟随的是待分配的对象类型,你额外加了
- Display函数参数类型错误:函数定义的参数为
int *p,但调用时传入的是node*类型的全局变量first,且函数内部用.访问指针成员也是错误的,指针访问成员需要用->运算符。 - 语法遗漏: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
相关产品推荐
相关产品推荐

