一道带尾指针的链表,每个节点的数据域是一个叫 id 的结构体,怎么编译不过去,求求各位大侠看下吧……

#include<cstdio>#include<cstdlib>#define
ERROR 0#define OK 1typedef int Status;typedef struct id{
int book; char idNum[20];}id;typedef id Elemtype;typedef
struct Link{ Elemtype data; struct Link
*next;}Link,*PLink;typedef struct Link_r{ PLink front;
PLink rear;}Link_r;Status InitLink(Link_r &l);Status
InsertLink(Link_r &l,Elemtype *e);Status FindLink(Link_r
&l,Elemtype* e);Status TraverseLink(Link_r l);Status InitLink(Link_r
&l){ l.rear=l.front=(PLink)malloc(sizeof(Link));
if(!l.front) return ERROR; l.rear->next=NULL;
return OK;}Status InsertLink(Link_r& l,Elemtype* e){
PLink p1; p1=(PLink)malloc(sizeof(Link)); if(!p1) return
ERROR; p1->data=*e; p1->next=NULL;
l.rear->next=p1; l.rear=l.rear->next; return
OK;}Status FindLink(Link_r& l,Elemtype* e){ int
flag=1; PLink p,p1; p=p1=l.front; while(p->next)
{ if(*e==p->next->data){ p1=p->next;
p->next=p1->next; if(p1->next==NULL){
l.rear=p; flag=0; }
printf("find\n"); free(p1); break;
} p=p->next; } if(p->next==NULL&&flag)
printf("not find\n"); return OK;}Status TraverseLink(Link_r
l){ PLink p; p=l.front; while(p->next){
printf("%d\n",p->next->data.book); p=p->next;
} return OK;}int main(){ id e; e.book=1;
scanf("%s",e.idNum); Link_r l; InitLink(l);
InsertLink(l,&e); FindLink(l,&e); TraverseLink(l);
return 0;}编译错误类型:error: no match for 'operator==' in '* e == p->Link::next->Link::data'| 各位大哥大姐帮忙……

第1个回答  2012-10-31
你帖的代码没排版啊,看着太乱了。

错误提示不都告诉你了吗? *e==p->Link::next->Link::data 这句。
你这个e是个结构 "==" 运算符不能 比较两个结构啊。

e->book == p->data.book 类似这样比较
第2个回答  2012-10-31
typedef struct Link
{
Elemtype data;
structLink *next;
}Link,*PLink; // PLink

typedef struct id
{
int book;
charidNum[20];
}id; //id

PLink p;
id e;

从p的定义可以看出,
p->next->data是Elemtype类型的,
而从e的定义可以看出,e是id结构体类型的
两者类型不同,不能“==”,
*e==p->next->data
如果你要改的话,要使这两者类型相同。
第3个回答  2012-10-31
整理一下格式先,这看的眼都花了。
相似回答