Article ID: 128213
Article Last Modified on 10/2/2003
APPLIES TO
- Microsoft Visual C++ 2.0 Professional Edition
- Microsoft Visual C++ 2.1
- Microsoft Visual C++ 2.2
This article was previously published under Q128213
SYMPTOMS
Defining a static member function together with a user-defined class destructor in a class that is used only as a return type of a member function in another class may cause the Microsoft C++ compiler version 9.0 to generate the following compiler error:
The sample code in the More Information section below demonstrates this problem.
RESOLUTION
To work around the problem, use one of the following suggestions:
Instead of using the chain notation to call the static member function, break the statement into two statements. For example,
b.GetClassA().problem(10); // error a = b.GetClassA(); // work-around a.problem(10);
where a is an instance of class A, b is an instance of class B based on the sample code below. -or-
- Define the static member function as a non-static member function. -or-
- Instead of returning object A for function GetClassA() in the following sample code, return a reference to A.
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 Microsoft Visual C++, 32-bit Edition, version 4.0.
MORE INFORMATION
The sample code below can be used to generate the C1001 error.
Sample Code
/* Compile options needed: none */ class A { public: ~A() {} static void problem(int a) {} }; class B { public: A GetClassA(); }; void main() { B b; b.GetClassA().problem(10); }
Additional query words: 2.00 2.10 2.20 9.00 9.10
Keywords: kbbug kbfix kbcpponly kbcompiler KB128213