次の構造のテンプレート クラスがあります。
//CFoo.hpp (header file)
template <typename T>
class CFoo {
struct SFoo {
T *ptr;
/* rest is irrelevant */
} *foo;
public:
/* omitting irrelevant parts */
SFoo* get();
};
ここで、ヘッダー ファイル内に SFoo* get()メソッドを実装すると、すべてがうまく機能します。ただし、宣言と定義を分離すると、コードは次のコンパイル エラーで動作しなくなります。
//CFoo.cpp (source code, example 1)
/* omitting irrelevant parts */
template <typename T>
SFoo* CFoo<T>::get() { return foo; } //ERROR HERE
エラー:<where-is-the-error>: error: ‘SFoo’ does not name a type
//CFoo.cpp (source code, example 2)
/* omitting irrelevant parts */
template <typename T>
CFoo<T>::SFoo* CFoo<T>::get() { return foo; } //ERROR HERE
エラー:<where-is-the-error>: error: need ‘typename’ before ‘CFoo<T>::SFoo’ because ‘CFoo<T>’ is a dependent scope
それを修正する方法についてのヒントを楽しみにしています。前もって感謝します。