BUG: Erroneous C2352 Generated When Using typedef'd Base ClassLast reviewed: July 22, 1997Article ID: Q115528 |
7.00 | 1.00 1.50
MS-DOS | WINDOWS
kbtool kbbuglist
The information in this article applies to:
SYMPTOMSWhen 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 functionWhen 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 STATUSMicrosoft 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
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |