テンプレートメソッドの定義をそのクラスの外に置くのに問題があります。.hファイルからの次のコードを検討してください(問題を理解するために必須ではないコードを削除しました)。
template <typename T> class CStyleAllocator
{
public:
// Conversion constructor declaration
template <typename U> CStyleAllocator(const CStyleAllocator<U>&);
};
// Attempted definition
template <typename T, typename U> CStyleAllocator<T>::CStyleAllocator(
typename const CStyleAllocator<U>&
)
{
}
Visual C ++ 2010コンパイラは、次のエラーを出力します。
1>c:\dev\devworkspaces\dev.main\platform\cpp\memory\cstyleallocator.h(67): error C2244: 'CStyleAllocator<T>::{ctor}' : unable to match function definition to an existing declaration
1> definition
1> 'CStyleAllocator<T>::CStyleAllocator(const CStyleAllocator<U> &)'
1> existing declarations
1> 'CStyleAllocator<T>::CStyleAllocator(const CStyleAllocator<U> &)'
1> 'CStyleAllocator<T>::CStyleAllocator(void)'
2つのジェネリック型に依存する変換コンストラクターを定義しようとしています。
クラス内の宣言と定義のマージは機能します。
template <typename T> class CStyleAllocator
{
public:
template <typename U> CStyleAllocator(const CStyleAllocator<U>&) { }
};
私が間違っているのを見ていますか?