>>92
上では、Niko内でHogeという名前を使うと、
最も内側にあるvoid Hoge();に解決され、それは形名でないのでエラー。

もっとも、そういう風にメンバの順番を替えるだけでエラーになったりならなかったりしては
混乱間違いなしということで、下のコードも本来はエラーになる。
(Hoge hoge;で外側のHogeを使っておきながら、後からメンバ名にHogeを持ち込んだという罪状)

::Hoge hoge;と外側の名前を使うことを明示するか、Hoge2などと別の名前にするのが正しい。
その場合hogeとHoge()のどっちを先に書いてもいい。