did any body know how to cross include head files?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • George Zhou

    did any body know how to cross include head files?

    Such as in a.h, I need put #include "b.h", while in b.h, I need put #include
    "a.h", but it does not work! Any alternative way to do it?



  • John Harrison

    #2
    Re: did any body know how to cross include head files?


    "George Zhou" <zhzhou@udel.ed u> wrote in message
    news:bekhjm$qaj $1@news.udel.ed u...[color=blue]
    > Such as in a.h, I need put #include "b.h", while in b.h, I need put[/color]
    #include[color=blue]
    > "a.h", but it does not work! Any alternative way to do it?
    >[/color]

    Include guards.

    #ifndef A_H
    #define A_H

    // this is a.h

    #endif

    #ifndef B_H
    #define B_H

    // this is b.h

    #endif

    Might not be what you need, but its the answer to your question.

    john


    Comment

    • MiniDisc_2k2

      #3
      Re: did any body know how to cross include head files?


      "George Zhou" <zhzhou@udel.ed u> wrote in message
      news:bekhjm$qaj $1@news.udel.ed u...[color=blue]
      > Such as in a.h, I need put #include "b.h", while in b.h, I need put[/color]
      #include[color=blue]
      > "a.h", but it does not work! Any alternative way to do it?
      >
      >
      >[/color]

      I've had this problem before. Something like this:

      // a.h
      #include "b.h"
      class A
      {
      public:
      A();
      A(B& data);
      int var;
      };


      // b.h
      #include "a.h"
      class B
      {
      public:
      B();
      B(A& data);
      int var;
      };

      As you can see, both classes need each other's files. You cannot do this,
      either you'll be using an endless loop or you'll be smart and use what John
      told you to do. Either way, however, one of the files isn't going to have
      access to the other's data. So what you need to do is declare, but not
      define the information:

      // a.h
      class B; // declaration

      class A
      {
      public:
      A();
      A(B& data);
      int var;
      };

      // b.h
      #include "a.h"

      class B
      {
      public:
      B();
      B(A& data);
      int var;
      };

      This will work. I always put a

      #pragma once

      in my header files, but not all compilers support that. They function
      exactly the same way as what John told you to do, it's just less coding.
      It's a good idea, it'll protect you from including files more than once (and
      then getting a billion redefinition errors).

      --
      MiniDisc_2k2
      To reply, replace nospam.com with cox dot net.



      Comment

      Working...