Mutual inclusions of header files is OK. Just don't throw actual function code into header files

Mutual inclusions of source files is something you ought to avoid.
Basically, a source file includes its header and any other headers it needs. To access data and functions from that source file, you include its header.
If you want to define data in the source file, specify the data in the header file as "extern" so other sources can access it.
If you want to define data in the header file, define it normally.
Headers themselves can become too large, so perhaps they ought to be separated like I suggest too. If you have "common" data that you typically need everywhere, you can make a common header, it should work.