I don't recommend an "everything in one" include that is included in every file. That greatly lengthens compile time if you've modified that header (or just about anything related to it).
First of all, use defines for safety (don't remember the name for this technique

):
Example
// init.h //
#ifndef _DARKRPG_INIT_H_
#define _DARKRPG_INIT_H_
void init();
#endif
// end of file //
Do that at the beginning of every header file. That way, nothing is included twice.
After that, it's just a matter of thinking through what order to include. Don't include everything in one header: it's just bad practice. Also avoid globals at all cost.
Rearrange your files like so:
Main.h:
// main.h //
#ifndef _DARKRPG_MAIN_H_
#define _DARKRPG_MAIN_H_
void main();
#endif
// end of file //
Init.h:
// init.h //
#ifndef _DARKRPG_INIT_H_
#define _DARKRPG_INIT_H_
void init(int* variable);
#endif
// end of file //
Output.h:
// output.h //
#ifndef _DARKRPG_OUTPUT_H_
#define _DARKRPG_OUTPUT_H_
void output(int* variable);
#endif
// end of file //
Init.cpp:
// init.cpp //
#include "init.h"
void init(int* variable)
{
*variable = 7;
}
// end of file //
Output.cpp:
// output.cpp //
#include "output.h"
void output(int* variable)
{
std::cout << *variable;
}
// end of file //
Main.cpp
// main.cpp //
#include "main.h"
int g_Int;
void main()
{
init(&g_Init);
output(&g_Init);
}
// end of file //
Windows Vista Home Premium Intel Pentium Dual-Core 1.6 Ghz 1GB DDR2 RAM GeForce 8600GT Twin Turbo