色々とありがとうございました。

class TEST {
 hoge_t h(1, 2); // expected identifier before numeric constant
};

の部分を

class TEST {
  HOGE h(1, 2);
};

にしたら大丈夫になりました。(hoge_t を使わないで HOGE のほうを)
ここで疑問が出ました。

typedef struct HOGE
{
  ...
} hoge_t;

の HOGE と hoge_t の違いはなんでしょうか。
片方がなくても動くようですが、先ほどの話のように HOGE を使ったほうが間違いがないような気がします。

そこで、

typedef struct HOGE
{
  ...
};

という風にしてしまいつつあるのですが、どういう副作用があるのでしょうか。