※ ChatGPTを利用し、要約された質問です(原文:templateクラス中のtypedef enumを戻り値にする方法)
templateクラス中のtypedef enumを戻り値にする方法
このQ&Aのポイント
VisualStudio2003でtemplateの使い方の学習中です。templateクラス中のtypedef enumを戻り値にする方法について教えてください。
CTreeMngクラスのテンプレートの特定の型を返すために、typedef enumを使用したいです。しかし、正しい書き方がわかりません。
エラーメッセージによると、CTreeMng<MYTYPE>::RESULTは依存名ではないとされています。どのように書けば正しくなるのかアドバイスをお願いします。
templateクラス中のtypedef enumを戻り値にする方法
こんにちは、VisualStudio2003でtemplateの使い方の学習中です。
言葉で書くと難しくなりますのでソースを書きます。
<h>
template<class MYTYPE> class CTreeMng
{
public:
CTreeMng(void);
~CTreeMng(void);
typedef enum {
SUCCESS // 成功
} RESULT;
RESULT SetPotision( NODE_POSITION pos );
};
<cpp>
template<class MYTYPE> CTreeMng<MYTYPE>::CTreeMng(void){}
template<class MYTYPE> CTreeMng<MYTYPE>::~CTreeMng(void){}
template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision( ){}
---------------------------------------------------------
上記の場合、
template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision( )
が、以下エラーとなります。
TreeMng.cpp(31): warning C4346: 'CTreeMng<MYTYPE>::RESULT' : 依存名は型ではありません。
仮に、
template<class MYTYPE> RESULT CTreeMng<MYTYPE>::SetPotision( )
でも、
TreeMng.cpp(31): error C2143: 構文エラー : ';' が 'CTreeMng<MYTYPE>::SetPotision' の前にありません。
となります。
正しい書き方は、どのように書けばよろしいのでしょうか?
アドバイスお願いします。
お礼
すみません。質問の際に書くのを忘れていました。 template<class MYTYPE> CTreeMng<MYTYPE>::RESULT CTreeMng<MYTYPE>::SetPotision ( NODE_POSITION pos ){ } としたのですが、やはり同じエラーでした。 #余談ですが、実の所、テンプレートはヘッダーのみに書くものです。 あ、そうなんですか、ヘッダにすべて書けば確かに上記問題は解決します。 ありがとうございました。
補足
#余談で頂いたアドバイスで納得しました。 クラステンプレートはクラスのテンプレート(雛形) よってヘッダに書くもの クラスではない。 ありがとうございます。