Cyclic header dependency

Discussion in 'C++' started by pallav, Apr 12, 2007.

  1. pallav

    pallav Guest

    I have to header files, circuit.h and latch.h that reference each
    other and are causing a cyclic dependency.

    latch.h file

    #include "circuit.h"
    typedef boost::shared_ptr<struct Latch> LatchPtr;

    class Latch
    {
    ...
    CircuitPtr circuit;
    };

    circuit.h file

    #include "latch.h"
    typedef boost::shared_ptr<struct Circuit> CircuitPtr;

    class Circuit
    {
    ...
    list<LatchPtr> latches;
    };

    As you can see there is a cyclic dependency. To get things to compile,
    what I've done is
    I've changed the circuit.h file as follows:

    new circuit.h file

    // defined in latch.h, can't do #include "latch.h" as that will
    introduce cyclic dependency
    extern typedef boost::shared_ptr<struct Latch> LatchPtr;

    typedef boost::shared_ptr<struct Circuit> CircuitPtr;

    class Circuit
    {
    ...
    list<LatchPtr> latches;
    };

    This solves the problem, but I'm wondering if this is the way to fix
    such issues. I know C++ has forward declarations but I"m still trying
    to figure out how to use them and if they'll solve this. The other
    option is to combine the two header files but I would prefer not to do
    that.

    Is the above fix bad practice? thanks for your time.
     
    pallav, Apr 12, 2007
    #1
    1. Advertising

  2. pallav

    anon Guest

    pallav wrote:
    > I have to header files, circuit.h and latch.h that reference each
    > other and are causing a cyclic dependency.
    >
    > latch.h file
    >
    > #include "circuit.h"
    > typedef boost::shared_ptr<struct Latch> LatchPtr;
    >
    > class Latch
    > {
    > ...
    > CircuitPtr circuit;
    > };
    >
    > circuit.h file
    >
    > #include "latch.h"
    > typedef boost::shared_ptr<struct Circuit> CircuitPtr;
    >
    > class Circuit
    > {
    > ...
    > list<LatchPtr> latches;
    > };
    >
    > As you can see there is a cyclic dependency. To get things to compile,
    > what I've done is
    > I've changed the circuit.h file as follows:
    >
    > new circuit.h file
    >
    > // defined in latch.h, can't do #include "latch.h" as that will
    > introduce cyclic dependency
    > extern typedef boost::shared_ptr<struct Latch> LatchPtr;
    >
    > typedef boost::shared_ptr<struct Circuit> CircuitPtr;
    >
    > class Circuit
    > {
    > ...
    > list<LatchPtr> latches;
    > };
    >
    > This solves the problem, but I'm wondering if this is the way to fix
    > such issues. I know C++ has forward declarations but I"m still trying
    > to figure out how to use them and if they'll solve this. The other
    > option is to combine the two header files but I would prefer not to do
    > that.
    >
    > Is the above fix bad practice? thanks for your time.
    >


    1) declare in the header file - implement (define) in the source file
    2) if you really want to do like you did, then do this:
    In circuit.h, do not include latch.h, but declare Latch class:

    class Latch;
    typedef boost::shared_ptr<class Latch> LatchPtr;

    class Circuit
    {
    ...
    list<LatchPtr> latches;
    };


    BTW you had an error in your typedef
     
    anon, Apr 13, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Dennis Lerche

    Cyclic Dependency problem

    Dennis Lerche, May 11, 2004, in forum: C++
    Replies:
    6
    Views:
    11,257
    Khaled.Jouda
    Jul 5, 2010
  2. Replies:
    3
    Views:
    641
    Michael Mair
    Apr 22, 2006
  3. pallav

    Cyclic header dependency

    pallav, Apr 12, 2007, in forum: C++
    Replies:
    3
    Views:
    403
    Michael
    Apr 13, 2007
  4. pallav

    Cyclic header dependency

    pallav, Apr 12, 2007, in forum: C++
    Replies:
    0
    Views:
    384
    pallav
    Apr 12, 2007
  5. pallav

    Cyclic header dependency

    pallav, Apr 12, 2007, in forum: C++
    Replies:
    1
    Views:
    605
Loading...

Share This Page