error C2678: binary '!=' : no operator defined which takes a left-hand operand of type 'struct ...

struct student * del(struct student * h)
{

struct student*p3,*p4,number;
if(head==NULL)
{
cout<<"请输入"<<endl;
return head;
}
p3=head;
while (number!=p3->number&&p3->next!=NULL)
{
p4=p3;
p3=p3->next;
}
if(number==p3->number)
{
if(p3==head)
head=p3->next;
else p4->next=p3->next;
cout<<"已删除的信息:"<<number;
n=n-1;
}
else
cout<<number<<"输出有误,请重新输入"<<endl;
return h;
}

显示的错误在上面,指 while (number!=p3->number&&p3->next!=NULL)这一行

有没人帮一下忙
希望能给出更改的方法

你的!=两边是结构
而结构如果没有重载比较操作符就不能直接比较结构
这个错误提示就是提示你重载!=这个操作符的
解决办法就是给student重载!=
你连student的结构都不给,谁也没办法给你改
只能模拟个例子给你看着改改吧
struct student
{
int m_a;
int m_b;
//下面是需要增加的部分
bool operator!=(const student& kk) { return (m_a != kk.m_a || m_b != kk.m_b); }
bool operator==(const student& kk) { return (m_a == kk.m_a && m_b == kk.m_b); }
};
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-25
你的number是个结构体类型,这个是不允许比较相等或不相等的。
这里不懂得是,你的p3->number中的number指的是什么?也是结构体吗?

你的代码不全,像结构体怎么定义的?这个函数从字面看是删除相关的学生信息,你是根据什么删除的呢?学号吗?这些信息都没有,是不好帮你改正的。
第2个回答  2011-06-28
需要重载"!=",如果不重载的话,默认情况下只能比较C内置的类型,例如:int、float等等。对于sruct结构类型,如果要使用==、!=等符号,一定需要重载,不然系统会报不能作为左值的错误。重载如下:
bool operator!=(const student& stu1,const student& stu2) {.......... return true; }
bool operator==(const student& stu1,const student& stu2) {.......... return true; }
第3个回答  推荐于2018-04-05
while (number!=p3->number&&p3->next!=NULL)这一行之前没有打到给number赋值的语句,number的值不确定。本回答被提问者和网友采纳
第4个回答  2011-06-30
number是个结构体,而p3->number 由于结构体没有给出来,所以看不出来时什么东西?如果是数值,则肯定是不能比较的。如果也是个和number一样的结构体,则不能这样比较结构体。可以改用memcmp,这样肯定没错。

...<<' : no operator defined which takes a right-hand opera_百度...
include <iostream> 不要加.h

...用类模板实现2个数相加。error C2679: binary '<<' : no opera...
改成numtype plus();

请教两个c++ 错误报告
1,没有一种操作符定义了对右操作数类型的处理(或者合适的转换)2.没有定义这种操作数或者转换成可以接受的类型预定义操作数.意思就是说,类型与操作不匹配,你需要检查一下你对你定义的类型进行了怎样的操作,那种操作你事先定义了吗?给你一个错误的例子,比如说,你不能对两个 string s1,s2;s1-s2;...

相似回答