質問です。XP、.NET です。

// Hoge.h
class CHoge
{
public:
 enum EHOGE { HOGE };
 EHOGE func();
};

// Hoge.cpp
EHOGE CHoge::func()
{
 return HOGE;
}

上記のようなコードのコンパイルが通りません。

Hoge.cpp(12): error C2143: 構文エラー : ';' が 'CHoge::func' の前にありません。
Hoge.cpp(13): error C2371: 'CHoge::func' : 再定義されています。異なる基本型です。
Hoge.h(10) : 'CHoge::func' の宣言を確認してください。
Hoge.cpp(12): error C2501: 'EHOGE' : 識別名を宣言するのに、型が指定されていません。
Hoge.cpp(13): error C2556: 'int CHoge::func(void)' : オーバーロード関数の戻り値は異なっていますが、引数リストは同一です。

列挙型は int 値ということで、戻り値を int 型にすれば確かにコンパイルは通りますが、どうも釈然としません。
列挙型を明示的に戻り値とすることはできないのでしょうか?
よろしくお願いします。