c++/type de valeur de décalage argument 1 dans le paramètre de modèle de liste

#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;
}

Ce sont les erreurs que je reçois et je ne peux pas le doigt sur ce qui est vraiment le problème:

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'
Hors-sujet, mais vous devriez sortir de l'habitude de l'utiliser new lorsque vous n'en avez pas besoin, et de l'utilisation de la muette de pointeurs quand vous en avez besoin. Sinon, vous allez passer votre vie débogage des fuites de mémoire, comme dans votre exemple, plutôt que d'écrire les codes intéressants.
Je suis ici pour apprendre. Si je renonce à l'aide de nouveau, pourriez-vous veuillez donner une autre façon de faire?
Dans ce cas, un simple automatique variable locale: people<name<string>> aPerson; Lorsque vous avez besoin d'allocation dynamique (parce que l'objet a à survivre à la fonction qui crée), vous devriez en apprendre davantage sur RAII et, en particulier, les pointeurs intelligents.
Si je vais utiliser les gens<nom<string>> toute personne âgée; toute personne âgée d'avoir un tableau de type nom?
Désolé, je n'ai pas lu le code correctement. Vous auriez besoin de aPerson être le type de béton person, pas le résumé people. Il n'y a toujours pas de besoin pour new.

OriginalL'auteur user2972206 | 2013-11-09