模板化类:无法将函数定义与现有声明匹配

mch*_*hen 3 c++ templates class

使用MSVC++ 2010,在其声明块之外定义模板化类成员:

template <typename T> class cls {
public:
    template <typename T> void bar(T x);
};
template <typename T> void cls<T>::bar(T x) {}
Run Code Online (Sandbox Code Playgroud)

收益率:

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)'
Run Code Online (Sandbox Code Playgroud)

为什么?

0x4*_*2D2 5

您需要两个模板声明,因为每个构造都在不同的模板参数上工作:

template <typename P>
template <typename T>
void cls<P>::bar(T x) {}
Run Code Online (Sandbox Code Playgroud)

但在我看来,bar根本不需要模板化.请改用:

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

template <typename T> void cls<T>::bar(T x) {}
Run Code Online (Sandbox Code Playgroud)