FIX: Compiler May Generate Invalid Errors for Local Classes (116486)



The information in this article applies to:

  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++, 32-bit Professional Edition 2.0

This article was previously published under Q116486

SYMPTOMS

The compiler may incorrectly generate the following error messages when compiling code that declares a local class that derives virtually from another class:
C2517: 'identifier' : right of '::' is undefined
C2270: 'identifier' : modifiers not allowed on nonmember functions
C2561: 'identifier' : function must return a value
Under Visual C++ version 2.0, the following errors are generated:
C2653: 'identifier' : is not a class name
C2561: 'identifier' : function must return a value
You can use the sample code in the "MORE INFORMATION" section, below, to illustrate this problem.

RESOLUTION

To avoid the error messages, either do not derive the local class virtually or do not declare both the parent and the derived class as local classes.

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was fixed in Microsoft Visual C++, 32-bit Edition, version 4.0.

MORE INFORMATION

Sample Code

/* Compile options needed: none
*/ 

   void main()
   {
       class B { public: int bi; };             // Class local to main
       class D : virtual public B { int di; };      // Class derived from
                                                // Local class B
       D d;
   }
				

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