On Wed, 2007-12-26 at 19:35 +0100, Tamas Marki wrote:
> 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

So are you saying that I should put the contents of drawbattle.h in
battle.h?

Reply via email to