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

时间:2016-02-02 15:53:26

标签: c++ class templates error-handling declaration

我正在使用模板类到Array但似乎函数与声明不匹配,我无法理解为什么:

template <class Type>
class Array
{
private:
    Type* m_data;
    unsigned int _size;

public:
    template <class Type> Array(unsigned int initial_size); // Function
}

由于函数本身与声明匹配,我甚至按Ctrl +'。让VS做这个功能,但仍然得到错误。我看到了类似的问题,但似乎他们都使用了参数,而我没有。

template<class Type>
Array<Type>::Array(unsigned int initial_size)
{
    _size = initial_size;
    m_data = new Type(initial_size);
}
  

'Array :: Array':无法将函数定义与现有声明匹配

为什么会发生错误?

2 个答案:

答案 0 :(得分:2)

那是因为Array(unsigned int initial_size)中没有声明函数(构造函数)Array<T>。有一个构造函数模板template <class Type> Array(unsigned int initial_size)

因此,您在类模板中有一个构造函数模板。

您可以这样定义:

template<typename Type>
template<typename AnotherType>
Array<Type>::Array(unsigned int initial_size){

但是,由于您似乎没有使用构造函数模板的模板争论,因此不清楚,为什么它首先是模板。

如果您不需要构造函数模板,那么我建议您使用常规构造函数:

public:
Array(unsigned int initial_size);

答案 1 :(得分:1)

无需在构造函数声明中使用template

template <class Type> Array(unsigned int initial_size);

只需使用:

Array(unsigned int initial_size);