How to declare classes that refer to the each other in Visual C++ (136005)
The information in this article applies to:
- Microsoft Visual C++ for Windows, 16-bit edition 1.0
- Microsoft Visual C++ for Windows, 16-bit edition 1.5
- Microsoft Visual C++ for Windows, 16-bit edition 1.51
- Microsoft Visual C++ for Windows, 16-bit edition 1.52
- Microsoft Visual C++, 32-bit Editions 1.0
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 2.2
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q136005 SUMMARY In C++, you may need to have two classes that contain data
members that refer to the other class as in this example:
class B
{
A * x;
};
class A
{
B * x;
};
This article shows by example how to declare two classes that contain
pointers to the other class. The two classes (A and B) are derived from other
classes (C and D) to better demonstrate this issue. If the two
classes are not declared correctly, errors such as the following can occur:
test1.h(8) : error C2501: 'B' : missing
decl-specifiers test1.h(8) : error C2143: syntax error : missing ';'
before '*' test1.h(8) : error C2501: 'x' : missing decl-specifiers
Note In Visual C++ 6.0, the error message is similar
to the following: test1.h(8) : error C2143: syntax error : missing ';'
before '*' test1.h(8) : error C2501: 'B' : missing storage-class or type
specifiers test1.h(8) : error C2501: 'x' : missing storage-class or type
specifiers Sample code
/* Compile options needed: none
*/
//================================
// test1.h
//================================
#ifndef _a_
#define _a_
class B;
class A : public D
{
B * x;
};
#endif
//================================
// test2.h
//================================
#ifndef _b_
#define _b_
class A;
class B : public C
{
A * y;
};
#endif
//=================================
// test.cpp
//=================================
class C
{
int q;
};
class D
{
int p;
};
#include "test1.h"
#include "test2.h"
void main(void)
{
}
Modification Type: | Major | Last Reviewed: | 9/1/2005 |
---|
Keywords: | kberrmsg kbhowto kbinfo kbcode KB136005 kbAudDeveloper |
---|
|