FIX: C2371: Cast to Struct Ptr in Default Arg of Class Member (148504)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Professional Edition 4.0
  • Microsoft Visual C++, 32-bit Professional Edition 4.1
  • Microsoft Visual C++, 32-bit Professional Edition 4.2
  • Microsoft Visual C++, 32-bit Enterprise Edition 4.2
  • Microsoft Visual C++, 32-bit Learning Edition 4.0
  • Microsoft Visual C++, 32-bit Learning Edition 4.2

This article was previously published under Q148504

SYMPTOMS

When encountering a cast to a structure pointer in the default argument of a class member function, the Visual C++ compiler generates the following error:
error C2371: 'MyClass' : redefinition; different basic types
This error does not occur if the function declaration is not a member of a class.

RESOLUTION

If you are casting from an integral literal, remove the cast. For example, change this:
   MyFunc (struct MyStruct *p = (struct MyStruct*)0);  //C2371 error
				
to this:
   MyFunc (struct MyStruct *p = 0);                    //no error
				
If you are casting from a different structure type, remove the struct keyword from the cast. For example, change this:
   yFunc (struct MyStruct *p = (struct MyStruct*)x);  //C2371 error
				
to this:
   MyFunc (struct MyStruct *p = (MyStruct*)x);         //no error
				

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbbug kbCompiler kbCPPonly kbfix kbVC500fix KB148504