模板无法将函数定义与现有声明相匹配
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);
我正在处理模板 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);