0

テンプレートメソッドの定義をそのクラスの外に置くのに問題があります。.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>&) { }
};

私が間違っているのを見ていますか?

4

1 に答える 1

0

次のようにしてみてください。

template <typename T>
template<typename U>
CStyleAllocator<T>::CStyleAllocator(
    const CStyleAllocator<U>&
)
{
}
于 2012-10-13T23:15:55.010 に答える