Manquant arguments de modèle avant '.' token
Je suis en train d'organiser mon programme en fonctions et ont couru dans ce,
d'erreur: "missing arguments de modèle avant '.' token"
une fois que j'essaie d'exécuter le code dans la fonction, il fonctionne très bien si c'est juste dans main()
. Quiconque est familier avec cette erreur de savoir ce que le problème peut être?
Note, le commentaire sur le code de l'erreur est supprimée, mais les dégâts avec la liste ordonnée class
et réinitialise sa longueur, ou quelque chose, causant la orderedlist.getlength()
fonction de return 0
, qui ne fait plus le code de la while()
boucle exécuter.
fonction:
void rentFilm(char* filmId, char* custId, char* rentDate, char* dueDate, int numFilm)
{
//orderedList <filmType> orderedList(numFilm);
//filmType newItem;
int index = 0;
bool found = false;
while (index < orderedList.getLength() && !found)
{
cout << "test" << endl;
if (strncmp(filmId,orderedList.getAt(index).number,6) == 0 && strncmp("0000",orderedList.getAt(index).rent_id,5) == 0)//If that film is rented by NO customer
{
cout << "test" << endl;
found = true;//customer can rent it
strcpy(newItem.number,filmId);
orderedList.retrieve(newItem);
orderedList.remove(newItem);
strcpy(newItem.rent_id,custId);
strcpy(newItem.rent_date,rentDate);
strcpy(newItem.return_date,dueDate);
orderedList.insert(newItem);
cout << "Rent confirmed!" << endl;
}
else
{
if (strncmp(filmId,orderedList.getAt(index).number,6) > 0 || strncmp("0000",orderedList.getAt(index).rent_id,5) > 0)
{
++ index;
}
else
{
throw string ("Not in list");
}
}
}
}
Insérer dans orderedList classe (où la durée est déterminée):
template <class elemType>
void orderedList<elemType>::insert(const elemType& newItem)
{
int index = length - 1;
bool found = false;
if (length == MAX_LIST)
throw string ("List full - no insertion");
//index of rear is current value of length
while (! found && index >= 0)
if (newItem < list[index])
{
list[index + 1] = list [index]; //move item down
--index;
}
else
found = true;
list [index + 1] = newItem; //insert new item
++length;
}
code dans le main, où la liste est remplie:
filmFile.open("films.txt", ios::in);
filmFile >> numFilm;
filmFile.get();
orderedList <filmType> orderedList(numFilm);
filmType newItem;
readString(filmFile, newItem.number,5);
for (int i = 0; i < numFilm; i++)
{
newItem.copy = filmFile.get();
readString(filmFile, newItem.title,30);
readString(filmFile, newItem.rent_id,4);
readString(filmFile, newItem.rent_date,8);
readString(filmFile, newItem.return_date,8);
filmFile.get();
orderedList.insert (newItem);//puts filmType struct into the ordered list.
readString(filmFile, newItem.number,5);
}
S'il vous plaît laissez-moi savoir si le code à partir de n'importe où ailleurs dans le programme serait utile dans l'évaluation de cette erreur.
orderedlist
? Est-il un class
?Oui, c'est une classe, et orderedList(numFilm) est un constructeur
Il ne semble pas y avoir de problème avec ce code. Voulez-vous donner à minimum code pour
class orderlist
.Ajouté un peu de code, n'a que peu d'aide?
Vous êtes loin d'être prêt à travailler avec des modèles encore. Revenir en arrière et étudier la différence entre une classe et une instance de la classe.
OriginalL'auteur darko | 2011-11-04
Vous devez vous connecter pour publier un commentaire.
Il ressemble à la ligne en commentaire déclare une variable avec le même nom qu'une classe.
Ainsi, lorsque vous commentez, des fonctions statiques de la classe se sont invoquées.
Modifier la déclaration à quelque chose comme:
puis modifier toutes les références de
orderedList
dans la fonction defilmList
.orderedList
n'a pas été renommé à autre chose.Ma conjecture est que vous avez besoin pour l'insertion de tous les éléments dans la liste pour sa longueur différente de zéro. Je ne sais rien à propos de la classe que vous soyez à l'instanciation, mais je parie que l'argument que vous passer au constructeur juste des conseils sur la façon de nombreux éléments de pré-allouer dans un vecteur il n'est donc pas besoin de développer le vecteur.
À droite, c'est de cette façon, la durée est déterminée. Comme les éléments sont insérés dans la classe, la longueur augmente.
Il n'y a aucun code à insérer des éléments dans la classe entre le moment où vous déclarez et lorsque vous l'utilisez, il est donc de la longueur avait mieux être de zéro. Peut-être que vous voulez qu'il soit statique, ou global?
Je insérer des éléments dans ma main, si ce code était dans la main, il avait un beau travail. tout ce que je suis en train de faire maintenant est de décomposer le programme en fonctions, et la seule raison pour laquelle j'ai cette déclaration, c'est parce que sans elle, le "Manque arguments de modèle avant '.' token" erreur est renvoyée
OriginalL'auteur Moishe Lettvin
Est le problème que vous créez une variable avec le même nom que le modèle? Quand vous dites,
c'est (un peu) envie de dire:
et puis attendre de
int+1
de retour43
Essayer quelque chose comme,
Et changin toutes les autres références à
orderedList
, àol
.orderedList <filmType> orderedList(numFilm);
en principal et il semble bien fonctionnerNe sachant que
orderedList(numFilm);
est mon orderedLists constructeur ont aucune importance ici?Non, ce n'est pas le cas, c'est une variable créée à partir de ce constructeur.
OriginalL'auteur tjm
Il semble que vous remplissez une variable
orderedList
dansmain()
et puis attendre qu'il soit automatiquement disponible dansrentFilm(...)
lorsque vous déclarez avec le même nom; ce n'est pas possible. Vous devez passer de l'objet à la fonction demain()
ou mieux à faire que de la fonction en tant que membre de la méthode de laclass orderedList
:où,
rentFilem()
fait maintenant partie de laclass
Maintenant à l'intérieur de la fonction, vous n'avez pas à déclarer la variable pour
orderedList
; utilisez simplementthis-><method/variable>
. Il devrait fonctionner..
. C'est ça le problème, la question se pose au sujet de.la question se pose de savoir si l'OP commentaires du code. Dans la dernière partie de la question, OP se demander, "pourquoi ne pas fonctionner si le code n'est pas commenté' ? (en fait de modèle nom de la classe et le même nom d'objet est autorisé par le compilateur)
Oui, mais je parle de votre "fixe" du code, qui a le même problème. Le commentaire "appeler la fonction comme ceci" n'est pas vraiment.
OriginalL'auteur iammilind