C ++模板方法定义在类中不匹配

时间:2012-10-13 23:11:01

标签: c++ templates compiler-construction methods compiler-errors

我无法将模板方法的定义放在其类之外。请考虑以下来自.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>&) { }
};

你看到我做错了吗?

1 个答案:

答案 0 :(得分:0)

试试这样:

template <typename T>
template<typename U>
CStyleAllocator<T>::CStyleAllocator(
    const CStyleAllocator<U>&
)
{
}