我正在使用模板类到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':无法将函数定义与现有声明匹配
为什么会发生错误?
答案 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);