• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 177
  • Last Modified:

header file confusion

Hi,

  I want to create two classes, say class A and class B. For each class, I have a header file(A.h and B.h) as well as implementation file(A.cpp and B.cpp).  My class A has a member variable which is of the type class B. Also, in my class B, there is a member variable of type class A. i.e. the class definition looks like this:

class A {
B testMember;
...
};

class B {
A testMember;
...
};

I have "include A.h" in the B.h file and also, I "include B.h" in the A.h file. Initially i got error saying some kind of recursion definition too deep. I realized this error and added #ifdef and #endif to my program to avoid the recursion. But then I got some error saying missing decl-specifiers. I wonder what is the proper way of doing this? I am using MSVC 5.0.

Any help is appreciated!

sunjian
0
sunjian061197
Asked:
sunjian061197
1 Solution
 
yonatCommented:
You can't have both A containing B and B containing A - consider the size of A, for example:
    sizeof(A) == sizeof(B) + size of the rest of A > sizeof(B)
But also:
    sizeof(B) == sizeof(A) + size of the rest of B > sizeof(A)

What you *can* do, is have A contain a pointer to B. So in A.h you should write:

class B; // forward declaration

class A
{
   B* testMember;
   ...
};

You don't need to #include B.h in A.h, only in A.cpp.

0
 
sunjian061197Author Commented:
Hi yonat,

   Thank you very much for your answer! You really saved me a lot of frustration...

sunjian
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now