FIX: Modifying Const Temporary Object Doesn't Generate Error

ID: Q149324


The information in this article applies to:
  • The C/C++ Compiler (CL.EXE), used with:
    • Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1, 4.2, 5.0


SYMPTOMS

The compiler generates the following error when you invoke a non-const member function on a const object:

error C2662: 'Set' : cannot convert 'this' pointer from 'const struct A *' to 'struct A *const '
However, it does not generate this error when you invoke a non-const member function on a const object that is returned by a function.


RESOLUTION

To work around this problem, make the function return a reference to const.


STATUS

This bug was corrected in Microsoft Visual C++, version 6.0.


MORE INFORMATION

Sample Code


/* Compile options needed: None
*/ 

truct A {

 int m_i;

 A() { m_i = 0; };

 void Set() {m_i = 5;}
};

truct B {

 A m_a;

 // Change the return type to 'const A &' to work around
 const A GetMember() const {return m_a;}
};

void TestFunc(const B & b)
{
 const A a;

 // Next line correctly generates:
 // error C2662: 'Set' : cannot convert 'this' pointer from
 // 'const struct A *' to 'struct A *const '

 // a.Set(); // Uncomment this line to get the error

 // Next line does not generate the error even though
 // B::GetMember returns const A object.
 // Change the return type of B::GetMember to 'const A &'
 // to get the error.

 b.GetMember().Set();

}

void main()
{
 B b;

 TestFunc(b);

} 

Additional query words:

Keywords : kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbVC600fix
Version :
Platform :
Issue type : kbbug


Last Reviewed: April 8, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.