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

程序中add_to_queue函数出现类型冲突错误,请求队列创建协助

求助:队列创建时add_to_queue函数的类型冲突错误

各位好,我正在编写一个用队列模拟5种分页算法的程序,现在卡在了队列创建环节,遇到了add_to_queue函数的类型冲突错误。我已经复制了node结构体及相关函数,头文件为project2_MLL.h,代码还远未完成,希望能得到大家的帮助,谢谢!

我的代码片段

#include "project2_MLL.h"
typedef struct node{
    char data[5];
    struct node* next;
    struct node* prev;
}nodes;
void make_queue(char datas[5]){
    struct node new_node;
    strcpy(new_node.data, datas);
    // ... 后续未完成的代码
}

可能的问题排查与解决建议

作为经常处理C语言队列问题的开发者,我帮你梳理几个核心方向:

  • 结构体类型定义冲突:你在这里自定义了nodes作为struct node的别名,但要重点检查头文件project2_MLL.h里是否已经存在同名的struct node定义。如果头文件里有重复声明,或者add_to_queue函数期望的结构体类型和你这里的不一致,就会触发类型冲突。建议先打开头文件确认已有结构体的定义形式。
  • 局部节点的内存无效问题:你在make_queue里直接声明了栈上的struct node new_node,如果后续要把这个节点加入队列,函数执行完毕后栈内存会被释放,队列里的指针会直接指向无效内存。正确的做法是用malloc在堆上分配节点:
    nodes* new_node = (nodes*)malloc(sizeof(nodes));
    if (new_node == NULL) {
        // 别忘了处理内存分配失败的情况
        perror("malloc failed");
        return;
    }
    strcpy(new_node->data, datas);
    new_node->next = NULL;
    new_node->prev = NULL;
    
  • 类型别名的统一使用:你既用了struct node又用了别名nodes,这种混用很容易导致类型不匹配。建议统一使用nodes来声明变量和函数参数,比如把add_to_queue的参数改成nodes*类型(如果之前是struct node*的话),保持类型完全一致。
  • 头文件重复定义防护:如果头文件project2_MLL.h里没有加头文件保护宏,多次包含可能会导致重复定义错误。可以在头文件开头加上:
    #ifndef PROJECT2_MLL_H
    #define PROJECT2_MLL_H
    // 头文件原有内容
    #endif
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:42