C++,遇到报错“构造函数语法缺少形参”错误无法解决

#include
using namespace std;
template
class mylinearlist
{
private:
int length;
int Maxsize;
T* element;

public:
mylinearlist::mylinearlist() : length(0), Maxsize(20)
{
element = new T[Maxsize];
}

mylinearlist<T>::mylinearlist(int l, int M) : length(l), Maxsize(M)
{
    element = new T[Maxsize]; 
}

mylinearlist<T>::~mylinearlist()
{
    delete[]element;
    //element = null;
}

//增:将元素x插入到线性表的第k个位置。
mylinearlist<T> &  mylinearlist<T>::Insert(int k, const T & x)
{
    if (k < 1 || k > length + 1)//保持线性表的特性。
    {
        cout << "元素下标越界,无法保持线性表的特性而插入失败" << endl;
    }
    else
        if (length == Maxsize)
        {
            cout << "线性表已满,无法添加新元素,插入失败" << endl;
        }
        else
            for (int i = length; i > k - 1; i--)
            {
                element[i] = elemnt[i - 1];//元素从后往前移,第i个(数组下标i-1)移到第i+1个.因为要将第k个元素移到第k+1的位置,即数组第k+1个位置赋值为第k个元素
            }
    element[k - 1] = x;
    length++;
    return *this;
}

//删:删除线性表第k个元素,将其保存到x中,并返回删除后的线性表。
mylinearlist<T> & mylinearlist<T>::Delete(int k, T & x)
{
    if (Getdata(k, x) == 0)
    {
        cout << "数组第k个位置出现越界而删除失败" << endl;
    }
    else
    {
        for (int i = lebngth; i > i - k; i--)
        {
            element[i - 1] = element[i - 2];
        }
        length--;
        return *this;
    }
}

//改:将线性表第k个位置的元素修改为x。
mylinearlist<T> & mylinearlist<T>::ModifyData(int k, const T & x)
{
    if (Getdata(k, x) == 0)
    {
        cout << "数组第k个位置出现越界而查找不到修改失败" << endl;
    }
    else
    {
        element[k - 1] = x;
    }
}

//查:查询第k个元素。    
bool & mylinearlist<T>::Getdata(int k, T & x)
{
    if (k < 1 || k > length)
    {
        cout << "元素下标越界,访问失败" << endl;
        return false;
    }
    else
    {
        x = element[k - 1];
        return ture;
    }
}

//判断线性表是否为空。
bool mylinearlist::IsEmpty(int k, T & x) const
{
return length == 0;
}

int mylinearlist<T>::Getlength() const
{
    return length;
}

int mylinearlist<T>::GetMaxsize() const
{
    return  Maxsize;
}

//查询元素x在表中的位置,不在则返回0。
int mylinearlist<T>::Find(const T& x)
{
    for (int i = 0; i < length; i++)
    {
        if (element[i] == x)
        {
            return i + 1;
        }
    }
    return 0;//1.不在则返回0;2.函数return后就会结束?
}

//编写将线性表全部元素放到输出流out中输出的成员函数
void mylinearlist<T>::output(ostream & out)const
{
    for (int i = 0; i < length; i++)
    {
        out << element[i] << endl;
    }
}
//重载输出运算符,调用线性表类型对象成员函数output将放在输出流out中的线性表元素输出。
friend ostream & operator<<(ostream& out, const mylinearlist<T> & x)
{
    x.output(out);
    return out;
}

};

#include
#include"linearlist.h"
using namespace std;
int main()
{
mylinearlist x;
cout << x.Getlength() << endl;
cout << x.GetMaxsize() << endl;
mylinearlist y(1, 20);
cout << y.Getlength() << endl;
return 0;
}
int mylinearlist::Getlength() const
{
return length;
}

int mylinearlist<T>::GetMaxsize() const
{
    return  Maxsize;
}

//查询元素x在表中的位置,不在则返回0。
int mylinearlist<T>::Find(const T& x)
{
    for (int i = 0; i < length; i++)
    {
        if (element[i] == x)
        {
            return i + 1;
        }
    }
    return 0;//1.不在则返回0;2.函数return后就会结束?
}

//编写将线性表全部元素放到输出流out中输出的成员函数
void mylinearlist<T>::output(ostream & out)const
{
    for (int i = 0; i < length; i++)
    {
        out << element[i] << endl;
    }
}
//重载输出运算符,调用线性表类型对象成员函数output将放在输出流out中的线性表元素输出。
friend ostream & operator<<(ostream& out, const mylinearlist<T> & x)
{
    x.output(out);
    return out;
}

};

#include
#include"linearlist.h"
using namespace std;
int main()
{
mylinearlist x;
cout << x.Getlength() << endl;
cout << x.GetMaxsize() << endl;
mylinearlist y(1, 20);
cout << y.Getlength() << endl;
return 0;
}

1.因为你定义的是类模板,使用的时候要用一个具体类型实例化模板。比如 mylinearlist<int> lst;
2.模板的定义也有问题。