soufi
soufi

Reputation: 1

C++ includes - Cross referencing files

In C++, I have A.h and B.h. I need to include A.h in B.h, then I needed to use an object from B inside A.cpp. So I included B.h in A.h so it refused. I tried to use these lines in .H files

#ifndef A_H
#define A_H
...my code
#endif

I had the same refused. so I tried in A.h file to put

class B;

as a defined class. so it took it as another class not the same B class which i want. what i have to do?

Upvotes: 0

Views: 1122

Answers (3)

In general, it is better to avoid circular references, but if you need them in your design, and your dependencies are as follows:

a.h <-- b.h <-- a.cpp (where x <-- y represents "y" depends on "x")

Just type that in:

// A.h
#ifndef A_HEADER
#define A_HEADER
...
#endif

// B.h
#ifndef B_HEADER
#define B_HEADER
#include "A.h"
...
#endif

// A.cpp
#include "A.h"
#include "B.h"
// use contents from both A.h and B.h

Upvotes: 0

NNN
NNN

Reputation: 386

See this FAQ

Upvotes: 2

florin
florin

Reputation: 14326

You cannot include A.h in B.h and also include B.h in A.h - it is a circular dependency.

If a structure or function in A need to reference a pointer to a structure in B (and vice-versa) you could just declare the structures without defining them.

In A.h:

 #ifndef __A_H__
 #define __A_H__

 struct DefinedInB;

 struct DefinedInA
 {
     DefinedInB* aB;
 };

 void func1(DefinedInA* a, DefinedInB* b);

 #endif __A_H__

In B.h:

 #ifndef __B_H__
 #define __B_H__

 struct DefinedInA;

 struct DefinedInB
 {
     DefinedInA* anA;
 };

 void func2(DefinedInA* a, DefinedInB* b);

 #endif __B_H__

You can do this only with pointers, again to avoid the circular dependency.

Upvotes: 1

Related Questions