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
|