Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Circular C++ Header Includes

In a project I have 2 classes:

// mainw.h

#include "IFr.h"
...
class mainw
{
public:
static IFr ifr;
static CSize=100;
...
};

// IFr.h

#include "mainw.h"
...
class IFr
{
public float[mainw::CSize];
};

But I cannot compile this code, getting an error at the static IFr ifr; line. Is this kind of cross-inclusion prohibited?

like image 859
paul simmons Avatar asked Aug 15 '09 10:08

paul simmons


People also ask

What do C header files contain?

A header file is a file with extension . h which contains C function declarations and macro definitions to be shared between several source files. There are two types of header files: the files that the programmer writes and the files that comes with your compiler.

How many C header files are there?

There are 19 header files in the Standard C Library.

What is a header C?

A header file is a file containing C declarations and macro definitions (see Macros) to be shared between several source files. You request the use of a header file in your program by including it, with the C preprocessing directive ' #include '. Header files serve two purposes.


1 Answers

Is this kind of cross-inclusions are prohibited?

Yes.

A work-around would be to say that the ifr member of mainw is a reference or a pointer, so that a forward-declaration will do instead of including the full declaration, like:

//#include "IFr.h" //not this
class IFr; //this instead
...
class mainw
{
public:
static IFr* ifr; //pointer; don't forget to initialize this in mainw.cpp!
static CSize=100;
...
}

Alternatively, define the CSize value in a separate header file (so that Ifr.h can include this other header file instead of including mainw.h).

like image 95
ChrisW Avatar answered Sep 21 '22 11:09

ChrisW