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

Template unable to match function definition to an existing declaration

我正在处理模板 class 到数组,但函数似乎与声明不匹配,我不明白为什么:

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

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

由于函数本身与声明匹配,我什至按了 Ctrl+'。'让 VS 执行该功能但仍然出现错误。我看到了类似的问题,但似乎他们都在我没有的参数中使用了 Type。

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

'Array::Array': unable to match function definition to an existing declaration

为什么会出现错误?

在构造函数声明中不需要使用template:

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

只需使用:

Array(unsigned int initial_size);

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

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

你可以这样定义它:

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

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

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

public:
Array(unsigned int initial_size);