tags:

views:

495

answers:

3

How do I do forward referencing / declaration in C++ to avoid circular header file references?

I have the #ifndef guard in the header file, yet memory tells me I need this forward referencing thing - which i've used before >< but can't remember how.

+15  A: 

You predeclare the class without including it. For example:

//#include "Foo.h" // including Foo.h causes circular reference
class Foo;

class Bar
{
...
};
antik
Also to note in this case: class Bar cannot contain a class Foo, but it can have a pointer to a class Foo.
KPexEA
Also note that the formal return type of functions can be of the forward declared type.
QBziZ
A: 

You won't get circular header files references if you have #ifndef guards. That's the point.

Forward referencing is used to avoid #include(ing) header files for objects you use only by pointer or reference. However, in this case you are not solving a circular reference problem, you're just practicing good design and decoupling the .h file from details it doesn't need to know.

Joe Schneider
That's not accurate. forward referencing could replace the need for an #include and thus eliminating the need for an #include circle.
shoosh
I agree that if you didn't have #ifndef guards, you might (sloppily) try to manage all your circular header dependencies by using forward declarations, however the OP said he DID have header guards.
Joe Schneider
A: 

I believe the correct term for what you are talking about is "forward declaration". "Forward referencing" would be a bit confusing.

Dima