Niezgodność typu / wartości c ++ na argumencie 1 na liście parametrów szablonu

#include <iostream>
using namespace std;

template<class T>
class people{
    public:
    virtual void insert(T item)=0;
    virtual T show(T info)=0;
};

template<class T>
class name
{
    private:
     T fname;
     T lname;
     public:
      name(T first, T last);
    //  bool operator== (name & p1, name &p2)
};
template <class T>
name<T>::name(T first, T last){
    fname = first;
    lname = last;
}
template <class T>
class person : public people<T>
{
    private:
    T a[1];
    int size;
    public:
    person();
    virtual void insert(T info);
    virtual T show();
};
template<class T>
person<T>::person(){
    size = 0;
}
template<class T>
void person<T>::insert(T info){
    a[0] =info;
}
template<class T>
T person<T>::show(){
      return a[0];
 }
int main(){
    string first("Julia"), last("Robert");
    name<string> temp(first,last);
    people<name>* aPerson = new person();
    aPerson-> insert(temp);
    aPerson->show();
    return 0;
}

Są to błędy, które ciągle napotykam i nie mogę dokładnie określić, na czym polega problem:

test.cpp:52: error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class people'
test.cpp:52: error:   expected a type, got 'name'
test.cpp:52: error: invalid type in declaration before '=' token
test.cpp:52: error: expected type-specifier before 'person'
test.cpp:52: error: expected ',' or ';' before 'person'
test.cpp:53: error: request for member 'insert' in '* aPerson', which is of non-class type 'int'
test.cpp:54: error: request for member 'show' in '* aPerson', which is of non-class type 'int'

questionAnswers(1)

yourAnswerToTheQuestion