Hi All ,
In below code i am getting error while assigning one object with other and result is clear as both objects are different types.
it is expected that RHS object should belong to same class. How to resolve this issue.

error: no match for operator= in obj1 = obj2;

error: candidates are: const b& b::operator=(const b&)

#include <iostream>
using namespace std;

class a
{
int a1 ,b;
public:
a(int x=0,int y=0):a1(x),b(y){}
void fun1() {cout<<a1;cout<<b;}
};

class b
{
private:
a *p;
public:

b (int x=0, int y=0)
{
p= new a(x,y);
}
b ( const b &obj)
{
p = new a (*obj.p);
}

const b& operator=(const b &obj)
{
if(this !=&obj)
{
delete p;
p=new a(*obj.p);

}
return obj;
}
void fun2(){p->fun1();}
~b () { delete p;}

};
int main()
{
b obj1(10,20);
a obj2(20,30);
obj1=obj2;//error 
//obj1.fun2();
//b obj2(obj1);
//obj1.fun2();
return 1;
}

You can add an assignment operator in class b that takes a reference to an a object:

const b& operator=( const a& anA )
{
    if (&a != p)
    {
        delete p;
        p = new a(anA);
    }
    return *this;
}

Also, your b class copy constructor should return a reference to *this instead of obj.

Edited 6 Months Ago by rubberman

Dear rubberman, Thanks for your response. i tried to implement same way but i am getting compilation error for condition if (&a != p).

assign.cpp:29: error: expected primary-expression before â!=â token

apart from this if i want to assign a class object to b class object then one more version of assignment operator needs to be implemented (obj2=ob1) scenario which i don't want.

it should be if (&anA != p). Sorry, my bad. Dagnabbit keyboard! :-)

Edited 6 Months Ago by rubberman

Another option,and possibly less confusing than trying to assign to an object of a different type, would be to use a constructor instead:

b(a& other)
{
    p = new a(other);
}

obj1 = b(obj2);

Edited 6 Months Ago by tinstaafl

Thanks rubberman. for obj2=ob1 case i need to overload assignment operator in class a.

This question has already been answered. Start a new discussion instead.