BUG: Erroneous C2352 Generated When Using typedef'd Base Class

ID: Q115528

7.00 | 1.00 1.50 MS-DOS | WINDOWS kbtool kbbuglist

The information in this article applies to:

SYMPTOMS

When compiling code using a typedef'd base class, as shown in the sample code below, the compiler incorrectly generates the following error:

   error C2352: 'Base::Print' : illegal call of nonstatic member function

When compiling the same code under C/C++, version 7.0, the following error message is generated instead of the C2352 message:

   error C2653: 'Superclass' : is not a class name

STATUS

Microsoft has confirmed this to be a bug with the C/C++ compiler, versions 7.0, 8.0, and 8.0c. We are researching the problem and will post new information here in the Microsoft Knowledge Base as soon as it becomes available.

This is not a problem in the 32-bit compilers.

Sample Code

/* Compile options needed: /c
*/ 
      #include <iostream.h>

      class Base
      {
         int i;

      public:

         Base() : i(123) {}
         virtual void Print() { cout << i << '\n'; }
      };

      class Derivd : public Base
      {
         double d;
         typedef Base Superclass;

      public:

         Derivd() : d(3.14159) {}
         virtual void Print1() { Base::Print(); cout << d << '\n'; }
         virtual void Print2() { Superclass::Print(); cout << d << '\n'; }
      };

      main()
      {
         Derivd test;
         test.Print();

         return 0;
      }

Additional reference words: 1.00 1.50 7.00 8.00 8.00c KBCategory: kbtool kbbuglist KBSubcategory: CPPIss Keywords : kb16bitonly

Last Reviewed: July 23, 1997