3

MSVC++ 2010 を使用して、宣言ブロックの外側でテンプレート化されたクラス メンバーを定義します。

template <typename T> class cls {
public:
    template <typename T> void bar(T x);
};
template <typename T> void cls<T>::bar(T x) {}

収量:

unable to match function definition to an existing declaration
1>          definition
1>          'void cls<T>::bar(T)'
1>          existing declarations
1>          'void cls<T>::bar(T)'

なぜ?

4

2 に答える 2

6

各コンストラクトは異なるテンプレート引数で機能するため、2 つのテンプレート宣言が必要です。

template <typename P>
template <typename T>
void cls<P>::bar(T x) {}

しかし、barテンプレート化する必要はまったくないように思えます。代わりにこれを使用してください:

template <typename T>
class cls
{
    public:
        void bar(T x);
};

template <typename T> void cls<T>::bar(T x) {}
于 2013-05-10T22:17:08.423 に答える