RibbitO_o 2016-11-04 11:59 采纳率: 0%
浏览 957
已结题

关于运算符+重载的时候出现错误

#include
#include
using namespace std;
// enum bool {false,true};
struct element { //定义链表中的结点结构
int val;
element next;
};
class list { //定义链表类
protected:element *elems;
public:
list() { elems = 0; }
~list();
virtual bool insert(int); //此虚函数在派生类中可重新定义
virtual bool deletes(int); //此虚函数在派生类中可重新定义
bool contain(int);
void print();
};
class set :public list { //将集合类 set 定义为链表类 list 的派生类
int Card;
public:
set() { Card = 0; }
bool insert(int); //重定义此函数
bool deletes(int); //重定义此函数
bool add(set
, set*);
bool and(set*, set*);
bool minute(set*, set*);
friend set operator +(set&, set&);
friend set operator -(set&, set&);
friend set operator (set&, set&);
};
list::~list() //list 类得析构函数定义,循环释放各元素所占的存储
{
element *tmp = elems;
for (element *elem = elems; elem != 0;)
{
tmp = elem;
elem = elem->next;
delete tmp;
}
}
bool list::insert(int val) //定义 list 类中插入元素的成员函数
{
element *elem = new element; //为新元素分配存储
if (elem != 0) {
elem->val = val; //将新元素插入到链表头
elem->next = elems;
elems = elem;
return true;
}
else return false;
}
bool list::deletes(int val) //定义 list 类中删除元素的成员函数
{
if (elems == 0) return false; //若表为空,返回 false
element *tmp = elems;
if (elems->val == val)
{ //若待删除的元素为表头元素
elems = elems->next;
delete tmp;
return true;
}
else
for (element *elem = elems; elem->next != 0; elem = elem->next)
if (elem->next->val == val)
{ //循环查找待删除元素
tmp = elem->next;
elem->next = tmp->next;
delete tmp;
return true;
}
return false;
}
bool list::contain(int val)
{ //判元素 val 在链表中是否存在,存在返回true,不存在返回false
if (elems == 0)return false;
if (elems->val == val) return true;
else
for (element *elem = elems; elem->next != 0; elem = elem->next)
if (elem->next->val == val)
return true;
return false;
}
void list::print() //输出链表中各元素
{
if (elems == 0) return;
for (element *elem = elems; elem != 0; elem = elem->next)
cout << elem->val << " ";
cout << endl;
}
bool set::insert(int val) //在 set 类中的 insert 的重定义版本
{
if (!contain(val))
{ //先判断此元素是否存在,然后再调用基类的此函数版本
++Card;
list::insert(val);
return true;
}
return false;
}
bool set::deletes(int val) //在 set 类中的 deletes 的重定义版本
{
if (list::deletes(val)) //调用基类中的此函数版本
{
return true;
}
return false;
}
bool set::add(set
s1,set* s2)
{
for (element* elem=s1->elems;elem!=NULL;elem=elem->next)
{
insert(elem->val);
}
for (element* elem = s2->elems; elem != NULL; elem = elem->next)
{
insert(elem->val);
}
return true;
}
bool set:: and (set* s1,set* s2)
{
for (element* elem=s1->elems;elem!=NULL;elem=elem->next)
{
if (s2->contain(elem->val))
{
insert(elem->val);
}
}
return true;
}
bool set::minute(set* s1,set* s2)
{
for (element* elem = s1->elems; elem!= NULL; elem = elem->next)
{
if (!s2->contain(elem->val))
{
insert(elem->val);
}
}
return true;
}

set operator +(set& s1, set& s2)
{
set s;

for (element* elem = s1.elems; elem != NULL; elem = elem->next)
{
    s.insert(elem->val);
}
for (element* elem = s2.elems; elem != NULL; elem = elem->next)
{
    s.insert(elem->val);
}
return s;

}

set operator -(set& s1, set& s2)
{
set s;
set* set1 = &s1;
set* set2 = &s2;
for (element* elem = set1->elems; elem != NULL; elem = elem->next)
{
if (!set2->contain(elem->val))
{
s.insert(elem->val);
}
}
return s;
}
set operator (set& s1, set& s2)
{
set s;
for (element
elem = s1.elems; elem != NULL; elem = elem->next)
{
if (s2.contain(elem->val))
{
s.insert(elem->val);
}
}
return s;
}

int main()
{
set *ptr, set1,set2;
ptr = &set1;
ptr->insert(15);
ptr->insert(16);
ptr->insert(17);
ptr->insert(18);
ptr->print();
ptr = &set2;
ptr->insert(20);
ptr->insert(19);
ptr->insert(17);
ptr->insert(18);
ptr->print();
set set3, set4, set5;
ptr = &set3;
set3 = (set1 + set2);
//set4 = set1 - set2;
//set5 = set1 * set2;

ptr->print();
ptr->print();
ptr->print();
return 1;

}

  • 写回答

4条回答 默认 最新

  • threenewbee 2016-11-04 14:09
    关注

    函数名不能叫and,怀疑是哪个头文件定义了。
    修改为and1就可以编译。 http://ideone.com/VJ0eWX

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?