Re: How to assign a non-const object to const reference
On Wed, 3 May 2006 07:17:02 -0700, Alamelu
<Alamelu@discussions.microsoft.com> wrote:
"Bruno van Dooren" wrote:
I am giving a sample code
AClass m_objA; //This variable is assigned in base class, declared public
void DerivedClass::Get (const AClass &refA)
{
refA = m_objA; //Gives error at this line. DerivedClass.cpp(3317) :
error C2678: binary '=' : no operator found which takes a left-hand operand
of type 'const AClass' (or there is no acceptable conversion)
}
Can anyone please tell me on how to do i solve it?
you have declared refA to be a const AClass &, yet you try to assign to it.
lose the const if you want to do that.
But Bruno...
if i modify the same function as below.. it doesn't give any error..
const AClass& DerivedClass::Get()
{
return m_ObjA;
}
But my question is, even again here, it's equivalent to assigning a
non-const object to const reference. But why doesnt the complier throw error
here?
These two examples are very different. The first one tries to assign a new
value to an object bound to a const reference. Since assignment operators
are never const, this cannot work. The second example does not try to copy
anything. It merely returns an object by reference. Maybe if I restate the
two examples, it will be more clear:
int x;
const int& r = x; // (2) Now r refers to x.
r = 2; // (1) Cannot assign to x through const reference.
These are reversed compared to your example, but the numbering is correct.
Just don't confuse (2) with assignment; it could have been written as:
const int& r(x); // (2) Now r refers to x.
Either way, this is initialization, not assignment, and each binds r to x.
--
Doug Harrison
Visual C++ MVP