顺序表的实现,一直报错

问题:顺序表的实作,一直报错

头文件:

template <class T, int MaxSize>
class SeqList {
    T data[MaxSize];
    int length;
public:
    SeqList();
    SeqList(T a[], int n);
    int ListLength();
    T Get(int pos);
    int Locate(T item);
    void Insert(int i, T item);
    T Delete(int i);
};

源文件:

#include "SeqList.h"
#include
using namespace std;
template 
SeqList::SeqList() {
    length = 0;
}
template 
SeqList::SeqList(T a[], int n) {
    cout << " 参数非法"; exit(1);
    for (int i = 0; i < n; i++)
        data[i] = a[i];
    length = n;
}
template 
int SeqList::ListLength() {
    return length;
}
template 
T SeqList::Get(int pos) {
    if (pos<1 || pos>length) { cout << "查找位置非法"; exit(1); }
    else return data[pos - 1];
}
template 
int SeqList::Locate(T item) {
    for (int i = 0; i < length; i++)
        if (data[i] == item)
            return i + 1;
    return 0;
}
template 
void SeqList::Insert(int i, T item) {
    if (length >= MaxSize) { cout << "上溢"; exit(1); }
    if (i<1 || i>length + 1) { cout << "插入位置非法"; exit(1); }
    for (int j = length - 1; j >= i - 1; j--)
        data[j + 1] = data[j];
    data[i - 1] = item;
    length++;
}
template 
T SeqList::Delete(int i) {
    if (length == 0) { cout << "下溢(underflow)"; exit(1); }
    if (i<1 || i>length) { cout << "删除位置非法"; exit(1); }
    T x = data[i - 1];
    for (int j = i; j < length; j++)
        data[j - 1] = data[j];
    length--;
    return x;
}
int main() {
    int a[5], i, j;
    for (i = 0; i < 5; i++) {
        cin >> j;
        a[i] = j;
    }
    SeqList10> s();
    SeqList10> s(int a[], int);
    s(a, 5).ListLength();
    s(a, 5).Get(3);
    s(a, 5).Locate(33);
    s(a, 5).Insert(2, 17);
    s(a, 5).Delete(2);
    return 0;
}

报错:(1)严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "class SeqList __cdecl s(int * const,int)" (?s@@YA?AV?$SeqList@H$09@@QAHH@Z),函数 _main 中引用了该符号
(2)严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK1120 1 个无法解析的外部命令

SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H

#include <cstddef>

template <class T, std::size_t MaxSize>
class SeqList
{
    T data[MaxSize];
    std::size_t length;

public:
    SeqList();
    SeqList(const T *a, std::size_t n);
    std::size_t ListLength() const;
    T Get(std::size_t pos) const;
    std::size_t Locate(T item) const;
    void Insert(std::size_t i, T item);
    T Delete(std::size_t i);
};

#endif // SEQLIST_H

main.cpp

#include <iostream>
#include <stdexcept>

#include "SeqList.h"

using namespace std;

template <class T, std::size_t MaxSize>
SeqList<T, MaxSize>::SeqList() : length(0)
{
}

template <class T, std::size_t MaxSize>
SeqList<T, MaxSize>::SeqList(const T *a, std::size_t n)
{
    if (n > MaxSize)
        throw std::invalid_argument("SeqList not enough space");
    memcpy(data, a, sizeof(T) * n);
    length = n;
}

template <class T, std::size_t MaxSize>
std::size_t SeqList<T, MaxSize>::ListLength() const
{
    return length;
}

template <class T, std::size_t MaxSize>
T SeqList<T, MaxSize>::Get(std::size_t pos) const
{
    if (pos >= length)
        throw std::out_of_range("index out of range");
    return data[pos];
}

template <class T, std::size_t MaxSize>
std::size_t SeqList<T, MaxSize>::Locate(T item) const
{
    return std::find(data, data + length, item) - data;
}

template <class T, std::size_t MaxSize>
void SeqList<T, MaxSize>::Insert(std::size_t i, T item)
{
    if (length == MaxSize)
        throw std::invalid_argument("SeqList not enough space");
    if (i > length)
        throw std::out_of_range("index out of range");
    for (std::size_t j = length - 1; j >= i; j--)
        data[j + 1] = data[j];
    data[i] = item;
    length++;
}

template <class T, std::size_t MaxSize>
T SeqList<T, MaxSize>::Delete(std::size_t i)
{
    if (i >= length)
        throw std::out_of_range("index out of range");
    T x = data[i];
    for (std::size_t j = i; j < length - 1; j++)
        data[j] = data[j + 1];
    length--;
    return x;
}

template <class T, std::size_t MaxSize>
std::ostream &operator<<(std::ostream &os, const SeqList<T, MaxSize> &s)
{
    os << '[';
    for (std::size_t i = 0; i < s.ListLength(); i++)
    {
        os << s.Get(i);
        if (i < s.ListLength() - 1)
            os << ',';
    }
    os << ']';
    return os;
}

int main()
{
    int a[5];
    for (int i = 0; i < 5; i++)
        cin >> a[i];

    SeqList<int, 10> s(a, 5);
    cout << "s=" << s << '\n';
    cout << "len(s)=" << s.ListLength() << '\n';
    cout << "s[3]=" << s.Get(3) << '\n';
    std::size_t pos = s.Locate(33);
    if (pos != s.ListLength())
        cout << "33 is at index " << pos << '\n';
    else
        cout << "s does not contains 33\n";
    s.Insert(2, 17);
    cout << "after s.Insert(2, 17): " << s << '\n';
    s.Delete(2);
    cout << "after s.Delete(2): " << s << '\n';

    return 0;
}

模板编程,不支持分离代码,头文件和cpp文件里的东西写在一起