Problems using classes

Short story long,i had to make 2 lists of integers,and perform reading,deleting,union,intersection,xor,subtraction operations using classes.
The following program gives me an error when IE: it enters union_function() and uses ll3.union_check.

I havent got a clue why....

#include <iostream>

using namespace std;

class linklist
{
private:

struct node
{
int data;
node *link;
}*p;

public:

linklist();
void append( int num );


void del( int num );
void union_function(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g);
void intersection_function(linklist& ll3,linklist ll1,linklist ll2,int &s,int &g);
void diferenta1(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g);
void diferenta2(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g);
void xor(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g);
void read(linklist &ll1,linklist &ll2,char a);
void display();
int check(node *q);
linklist(linklist&);
void merge(linklist& ll3);
int union_check();
int return_node();
int intersection_check();
int xor_check();
int count();
~linklist();
};

linklist::linklist()
{
p=NULL;
}

void linklist::append(int num)
{
node *q,*t;

if( p == NULL )
{
p = new node;
p->data = num;
p->link = NULL;
}
else
{
q = p;
while( q->link != NULL )
q = q->link;

t = new node;
t->data = num;
t->link = NULL;
q->link = t;
}
}




void linklist::del( int num )
{
node *q,*r;
q = p;
if( q->data == num )
{
p = q->link;
delete q;
return;
}

r = q;
while( q!=NULL )
{
if( q->data == num )
{
r->link = q->link;
delete q;
return;
}

r = q;
q = q->link;
}
cout<<"\nElement "<<num<<" not Found.";
}

void linklist::display()
{
node *q;
cout<<endl;

for( q = p ; q != NULL ; q = q->link )
cout<<endl<<q->data;

}

int linklist::union_check()
{
node *q1,*q2;q2=p;int g;
do
{
g=0;


for(q1=p;q1!=NULL;q1=q1->link)
{
if(q1->data==q2->data)
{
g++;
}
}
if(g==2){return q2->data;};
q2=q2->link;
}while(q2!=NULL);



}

int linklist::xor_check()
{
node *q1,*q2;q2=p;int g;
do
{
g=0;


for(q1=p;q1!=NULL;q1=q1->link)
{
if(q1->data==q2->data)
{
g++;
}
}
if(g==3){return q2->data;};
q2=q2->link;
}while(q2!=NULL);



}

int linklist::intersection_check()
{node *q1,*q2;q2=p;int g;
do
{
g=0;


for(q1=p;q1!=NULL;q1=q1->link)
{
if((q1->data==q2->data))
{
g++;
}
}
if(g!=2){return q2->data;};
q2=q2->link;
}while(q2!=NULL);
}


int linklist::return_node()
{
node *q;q=p;
return q->data;

}


void linklist::merge(linklist& ll3)
{
node *q;
cout<<endl;

for( q = p ; q != NULL ; q = q->link )
{ll3.append(q->data);};



}

int linklist::check(node *q)
{
return q->data;
}

inline linklist::linklist(linklist&)
{

p=p->link;
}


int linklist::count()
{
node *q;
int c=0;
for( q=p ; q != NULL ; q = q->link )
c++;

return c;
}

linklist::~linklist()
{
node *q;
if( p == NULL )
return;

while( p != NULL )
{
q = p->link;
delete p;
p = q;
}
}


void linklist::union_function(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g)
{
cout<<"yaya";
ll1.merge(ll3);
ll2.merge(ll3);g=0;f=0;s=0;
do
{
g++;
if(ll3.union_check()==0)
{
s++;
};cout<<" Yaya ";
if((ll3.union_check()!=0||s==2)&&f==1){del(ll3.union_check());}else f++;



}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.union_check()!=0));
cout<<"*************"<<endl;
ll3.display();cout<<endl;
cout<<"*************"<<endl;
}

void linklist::intersection_function(linklist& ll3,linklist ll1,linklist ll2,int &s,int &g)
{
while(ll3.count()!=0)
{
ll3.del(ll3.return_node());
};
ll1.merge(ll3);
ll2.merge(ll3);g=0;s=0;
do
{
if(ll3.intersection_check()==0)
{
s++;

};

if(ll3.intersection_check()!=0||s==1){ll3.del(ll3.intersection_check());};

g++;
}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.intersection_check()!=0));g=0;s=0;
if(ll3.count()!=0)
{
do
{ if(ll3.union_check()==0)
{
s++;
};
if(ll3.union_check()!=0||s==2)ll3.del(ll3.union_check());

g++;
}while(g<(ll1.count()+ll2.count())&&s<2&&ll3.union_check()!=0);
cout<<"**************"<<endl;
ll3.display();cout<<endl;
cout<<"**************"<<endl;
}else
cout<<endl<<"Multimea vida"<<endl;
}

void linklist::diferenta1(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g)
{
int a;
while(ll3.count()!=0)
{
ll3.del(ll3.return_node());
};
ll1.merge(ll3);
ll2.merge(ll3);g=0;s=0;f=0;
do
{
g++;
if(ll3.union_check()==0)
{
s++;
};
if((ll3.union_check()!=0||s==2)&&f==1){ll3.del(ll3.union_check());}else f++;



}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.union_check()!=0));
ll2.merge(ll3);
g=0;s=0;f=0;
do
{
g++;
if(ll3.union_check()==0)
{
s++;
};
if((ll3.union_check()!=0||s==2)&&f==1){a=ll3.union_check();ll3.del(ll3.union_check());ll3.del(a);}else f++;



}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.union_check()!=0));
cout<<"**********************8"<<endl;
ll3.display();cout<<endl;
cout<<"**********************8"<<endl;
}

void linklist::diferenta2(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g)
{
int a;
while(ll3.count()!=0)
{
ll3.del(ll3.return_node());
};
ll1.merge(ll3);ll2.merge(ll3);
g=0;s=0;f=0;
do
{
g++;
if(ll3.union_check()==0)
{
s++;
};
if((ll3.union_check()!=0||s==2)&&f==1){ll3.del(ll3.union_check());}else f++;



}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.union_check()!=0));
ll1.merge(ll3);
g=0;s=0;f=0;
do
{
g++;
if(ll3.union_check()==0)
{
s++;
};
if((ll3.union_check()!=0||s==2)){a=ll3.union_check();ll3.del(ll3.union_check());ll3.del(a);}



}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.union_check()!=0));
cout<<"**********************8"<<endl;
ll3.display();cout<<endl;
cout<<"**********************8"<<endl;
}


void linklist::xor(linklist& ll3,linklist ll1,linklist ll2,int &s,int &f,int &g)
{
int a;
while(ll3.count()!=0)
{
ll3.del(ll3.return_node());
};
ll1.merge(ll3);ll2.merge(ll3);
g=0;s=0;f=0;
do
{
g++;
if(ll3.union_check()==0)
{
s++;
};
if((ll3.union_check()!=0||s==2)&&f==1){ll3.del(ll3.union_check());}else f++;



}while(g<(ll1.count()+ll2.count())&&(s<2||ll3.union_check()!=0));
ll1.merge(ll3);ll2.merge(ll3);
g=0;s=0;f=0;
do
{ if(ll3.xor_check()==0)
{
s++;
};
if(ll3.xor_check()!=0||s==3){a=ll3.xor_check();ll3.del(ll3.xor_check());ll3.del(a);ll3.del(a);};

g++;
}while(g<(ll1.count()+ll2.count())&&s<2&&ll3.xor_check()!=0);g=ll3.count()/2;f=0;
while(f<g)
{
ll3.del(ll3.return_node());f++;
};

cout<<"**************"<<endl;
ll3.display();cout<<endl;
cout<<"**************"<<endl;
}


void linklist::read(linklist &ll1,linklist &ll2,char c)
{
int x;
cout<<"Introduceti elemente in multimea A (')' va determina incheierea inserarii elementelor) ";
cout<<endl<<"(";
do
{
cin>>x;ll1.append(x);cin>>c;
}while(c!=')');
cout<<"Introduceti elemente in multimea B (')' va determina incheierea inserarii elementelor)";
cout<<endl<<"(";
do
{
cin>>x;ll2.append(x);cin>>c;
}while(c!=')');
ll1.display();cout<<endl<<"-----"<<endl;
ll2.display();cout<<endl<<"-----"<<endl;
}


void main()
{
int g=0,s=0,f=0,a=0;
char c;
linklist ll1,ll2,ll3;
cout<<" <c>-citire ; <r>-reuniune ; <i>-intersectie ; <a>-a/b ; <b>-b/a ; <x>-xor ;"<<endl;
do
{
cin>>c;
switch(c)
{
case 'c':ll3.read(ll1,ll2,c);break;
case 'r':ll3.union_function(ll3,ll1,ll2,s,f,g);break;
case 'i':ll3.intersection_function(ll3,ll1,ll2,s,g);break;
case 'a':ll3.diferenta1(ll3,ll1,ll2,s,f,g);break;
case 'b':ll3.diferenta2(ll3,ll1,ll2,s,f,g);break;
case 'x':ll3.xor(ll3,ll1,ll2,s,f,g);break;
default:cout<<endl<<"Incearca din nou . ";
};
}while(c!='t');


};
you seem to be passing ll3 by reference to itself. I haven't found what is causing the error, but this seems strange and confusing.
Well,the debugger says everything is OK,but i think there is a problem with the copy constructor,when i self reference ll3.
Topic archived. No new replies allowed.