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
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:
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
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
Vous devez vous connecter pour publier un commentaire.
name
est basé sur un modèle de classe, de sorte que vous devez spécifier le modèle:resolved
.Ce code serait d'erreur du compilateur: ">> "doit être" > > " à l'intérieur d'un modèle imbriqué liste d'arguments
est pris en charge [stackoverflow.com/q/6695261/1969455](from C++11).
Aucune preuve de cet au-delà du lien.
href="https://github.com/cplusplus/draft/blob/master/papers/n3337.pdf" >N3337 14.2.3: [..] de Même, le premier non-imbriquées >> est traitée comme deux fois de suite, mais distincts > jetons, [..]
OriginalL'auteur yizzlez