#include <REGX52.H>
#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct printnode{ // 队列定义
unsigned char *numpoint;
struct printnode *next;
}printnode,*print;
void push(unsigned char *q,print l) //将地址q放入队列
{
printnode *lq1,*lq2;
if(l->next==NULL) lq1=l->next;
else {
lq1=l->next;
while(lq1->next!=NULL)
{
lq1=lq1->next;
}
}
lq2=(struct printnode*)malloc(sizeof(struct printnode));
lq2->numpoint=q;
lq1->next=lq2;
//lq2->next=NULL;
}
unsigned char* pop(print l) //弹出一个地址
{
unsigned char *exam;
struct printnode *pointexam;
if(l->next==NULL) exam=NULL;
else{
pointexam=l->next;
l->next=l->next->next;
pointexam->next=NULL;
exam=pointexam->numpoint;
}
return exam;
}
你的print是在C文件里定义的,所以h文件里肯定没有这个定义,编译器处理到那里的时候就无法处理。你贴的那段代码倒是没什么问题。
一般应该把类型定义放到头文件里,而且在包含的时候处于前面的位置,这样,后面的头文件里才能使用相应的类型。
就你这段代码来说,应该把
typedef struct printnode{ // 队列定义
unsigned char *numpoint;
struct printnode *next;
}printnode,*print;
放到queue.h那段代码之前
没找到问题编辑,自己回复一下,我后来又试了一下把结构体声明放在函数声明里,这样不行,最后决定把这个子程序去掉,直接把这两个子函数并到主函数去,这样现在的问题就消失了,但在单片机上运行的时候是无法运行的,查了一些资料知道了那个malloc函数是不能在stc89c516的芯片里用的,原因大概是单片机内存有限,且没有相应的硬件,所以无法实现内存管理,直接这么干的话会形成大量碎片内存,导致后续没有足够内存空间,如果想要使用malloc相似的功能需要自己设计一个内存管理软件。
typedef struct printnode{ // 队列定义
unsigned char *numpoint;
struct printnode *next;
}printnode,*print;
定义这里有问题,导致编译器不知道l的类型
不确定C51是否支持这样嵌套定义
看错误提示,应该是QUEUE.H 文件里第4 第5两行里,括号 () 逗号 , 分号 ; 等标点符号,是否中文全角的。
你函数声明在结构声明之前,那它肯定不知道print是什么