ID: Q115528
7.00 | 1.00 1.50 MS-DOS | WINDOWS kbtool kbbuglist
The information in this article applies to:
- Microsoft C/C++ for MS-DOS, version 7.0
- Microsoft Visual C++ for Windows, versions 1.0 and 1.5
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
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.
/* 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