あなたが作ったヘッダファイル baka.h を、#include した
二つのソースコードが a.cpp, b.cpp があったとするよ。

a.cpp をコンパイルすると、a.obj の中に baka.h の中で
記述されていた hoge() 関数の実体ができました。

b.cpp をコンパイルすると、b.obj の中に baka.h の中で
記述されていた hoge() 関数の実体ができました。

さて、a.obj と b.obj をリンクします。
・・・a.objの hoge() 実体と b.obj の hoge() 実体、どっちを
採用すればいいの?

注意) コンパイラ・リンカにはそれが同じものだということがわかりません。
というか最適化の結果、異なるものに替わる可能性すらあります。でも両方とも同じ名前がついちゃってるんです。



つまりあなたの作った baka.h はそのプログラムの中でしか使えない再利用性のないファイルだということです。