On Dec 26, 2007 5:41 PM, Michael Sullivan <[EMAIL PROTECTED]> wrote:
> On Wed, 2007-12-26 at 17:35 +0100, Tamas Marki wrote:
> > On 12/26/07, Michael Sullivan <[EMAIL PROTECTED]> wrote:
> > > In my project I have moved the majority of SDL code from the Battle
> > > class to a new class called DrawBattle. I'm trying to build it, but
> > > DrawBattle refuses to recognize my Battle class. I know that this
> > isn't
> > > finished, but I prefer to debug and rebuild as I go. I have pasted
> > the
> > > code for only the relevant classes:
> >
> > [snip code]
> >
> > I didn't really read through all your code, but it seems like that you
> > are falling into the 'recursive includes' trap, meaning that battle.h
> > includes drawbattle.h and vice versa. Just think about it for a moment
> > what would you do if you were the preprocessor... Confused yet? :)
> > You might need to rethink that part a bit.
> > HTH
> >
> > --
> > Tamas Marki
>
> How else do you propose that I make my party array available to
> DrawBattle? drawbattle.h and battle.h are each included only once...
Well, if the classes _really_ need to know each other (as opposed to
one knowing about the other but not vice versa), then one way to do it
is with pointers. You don't need a full class declaration to specify a
member that is a pointer to a given class.
Observe (simplified for readability purposes)...
// file1.h
class B;
class A
{
B* bPointer;
};
// file2.h
#include "file1.h"
class B
{
A aObject;
};
But when you use the bPointer in class A's member functions you'll
need to include file2.h, but that's why you write the implementation
in the .cpp file (and that's where you include file2.h) - thus
escaping the circular includes.
Still I think it might be better to rethink your design to avoid this
kind of confusion.
--
Tamas Marki