В заголовочном файле пишете:
#if !defined(__MAIN_H_INCLUDED__) // Это чтобы файл не парсился несколько раз
// при компиляции одного cpp-файла
#define __MAIN_H_INCLUDED__
int main(); // Форвард-определения функций
extern int x; // Внешние определения переменных
const int y = 0; // Константы
template <class _T> // Шаблоны классов и функций содержат тела функций
class ClassT {
public:
ClassT()
{ }
};
inline int get_x() { // Инлайновые функции тоже тело находится в заголовке
return x;
}
#endif // __MAIN_H_INCLUDED__
Всё остальное опеределяется в cpp-файле.