main.cppで#include "Func.h"
sub.cppで#include "Func.h"

Func.h内は
クラスTimerの定義が有るとすれば
いくら
#ifndef DEF_NAME
#define DEF_NAME
...
#endif
した所で、コンパイルして後のリンク時に再定義エラー
が起こるわけで............。

これじゃ、再定義にならないように#ifndef,#defineの意味無いんじゃない?
1つのソースファイル内でまさか2度同じヘッダをインクルードするわけ
なんてないし...
だとしても、直ぐに気づくと思いますが