Microsoft KB Archive/149324

From BetaArchive Wiki
Knowledge Base


Article ID: 149324

Article Last Modified on 7/5/2005



APPLIES TO

  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition



This article was previously published under Q149324

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);

}
                

Keywords: kbbug kbfix kbvc600fix KB149324