C语言链表开发:结构体指针类型不兼容警告问题求助
问题解决:指针类型不兼容警告修复
警告根源
你遇到的assignment to ‘struct node_t *’ from incompatible pointer type ‘node_t *’警告,本质是类型定义不匹配:
- 你通过
typedef struct node node_t;把struct node别名为node_t,但在struct stats里却错误地声明了struct node_t*类型的指针。 - 在C语言中,
struct node_t是一个从未定义过的全新结构体类型,和你实际使用的node_t(即struct node)完全不是一回事,所以编译器认为这两个指针类型不兼容。
修复步骤
修改struct stats的定义,把错误的struct node_t*替换为正确的node_t*(或等价的struct node*):
struct stats { // 修正指针类型为node_t* node_t* oldest; node_t* youngest; int numBD[12]; }; typedef struct stats list_stats_t;
这样stat.oldest = oldest;和stat.youngest = youngest;中的左右两边指针类型就完全一致,警告会直接消除。
额外注意(非警告相关,但影响逻辑)
你的isOlder函数调用逻辑可能存在问题:当前代码里isOlder(oldest)的写法看起来只传了一个参数,但比较两个节点的年龄应该需要两个参数(比如当前节点和候选的最老/最年轻节点)。例如正确的调用应该类似:
// 判断当前temp是否比oldest更老,如果是则更新oldest if (isOlder(temp, oldest)) { oldest = temp; } // 判断当前temp是否比youngest更年轻,如果是则更新youngest if (!isOlder(temp, youngest)) { youngest = temp; }
(具体逻辑取决于isOlder的实现:假设isOlder(a,b)返回true表示a比b年龄大)
内容的提问来源于stack exchange,提问作者Noah Nininger
相关产品推荐
相关产品推荐

