Fehlende Vorlage Argumente before '.' token
Ich versuche zu organisieren, mein Programm in Funktionen und haben lief in dieses,
Fehler: "missing template-Argumente before '.' token"
sobald ich versuche, führen Sie den code in der Funktion, es funktioniert gut, wenn die nur in main()
. Jeder, der sich mit diesem Fehler wissen, was das Problem sein kann?
Hinweis, den auskommentierten code entfernt den Fehler aber verwirrt mit der geordneten Liste class
und setzt seine Länge oder etwas, wodurch die orderedlist.getlength()
Funktion return 0
, das macht keiner der code in der while()
Schleife ausführen.
Funktion:
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");
}
}
}
}
Einfügen in orderedList Klasse (wobei die Länge bestimmt):
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 in main, wo die Liste ist gefüllt:
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);
}
Bitte lassen Sie mich wissen, wenn code von einer beliebigen anderen Stelle im Programm wäre hilfreich bei der Beurteilung dieser Fehler.
orderedlist
? Ist es ein class
?Ja, es ist eine Klasse, und "orderedList" (numFilm) ist ein Konstruktor
Es scheint nicht ein problem mit diesem code. Vielleicht möchten Sie minimal code für
class orderlist
.Hinzugefügt ein bisschen relevanten code, hilft das überhaupt?
Sie sind nirgendwo in der Nähe bereit zu sein, arbeiten mit Vorlagen noch. Gehen Sie zurück und studieren Sie den Unterschied zwischen einer Klasse und einer Instanz der Klasse.
InformationsquelleAutor darko | 2011-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht ist die Zeile auskommentiert deklariert eine variable mit dem gleichen Namen wie eine Klasse.
Also, wenn Sie einen Kommentar, statische Funktionen der Klasse werden immer aufgerufen.
Änderung der Erklärung etwas wie:
dann ändern Sie alle Verweise von
orderedList
in der FunktionfilmList
.orderedList
nicht umbenannt wurde, um etwas anderes.Meine Vermutung ist, dass Sie brauchen, um tatsächlich fügen Sie alle Elemente in der Liste aus, um dessen Länge ungleich null. Ich weiß nichts über die Klasse Sie instanziiert, aber ich Wette, das argument übergeben Sie dem Konstruktor nur Andeutungen darüber, wie viele Elemente bereits vorab zuzuweisen, in einen Vektor, so dass Sie nicht brauchen, um zu wachsen, die den Vektor.
Recht so, Länge bestimmt wird. Als Elemente werden eingefügt in die Klasse, die Länge erhöht.
Es gibt keinen code zum einfügen von Elementen in die Klasse zwischen, wenn Sie declare es, und wenn Sie es verwenden, es ist also die Länge wäre besser, gleich null sein. Vielleicht wollen Sie es statisch oder global???
Ich Elemente einfügen, in meinem Haupt, wenn dieser code in der main, es würde funktionieren. alles was ich versuche zu tun, jetzt ist Pause bis das Programm in den Funktionen und der einzige Grund, ich habe diese Erklärung in dieser Funktion ist, weil ohne Sie die "Missing template-Argumente before '.' token" - Fehler geworfen
InformationsquelleAutor Moishe Lettvin
Ist das problem, das Sie erstellen eine variable mit dem gleichen Namen wie die Vorlage? Wenn Sie sagen,
dass die (Art von) wie gesagt,
und dann zu erwarten, dass
int+1
zurück43
Versuchen Sie so etwas wie,
Und wie alle anderen Referenzen zu
orderedList
zuol
.orderedList <filmType> orderedList(numFilm);
im main und es scheint gut zu funktionierenNicht zu wissen, dass
orderedList(numFilm);
ist mein orderedLists Konstruktor irgendeine Bedeutung haben hier?Nein, es ist nicht, es ist eine variable wird erstellt, der Konstruktor.
InformationsquelleAutor tjm
Scheint es, dass Sie füllen eine variable
orderedList
immain()
und dann erwarten, dass es automatisch zur Verfügung, inrentFilm(...)
bei der Deklaration mit dem gleichen Namen; ist das nicht möglich. Sie müssen übergeben Sie das Objekt an die Funktion vonmain()
oder besser zu machen, die Funktion als member-Methode derclass orderedList
:wo
rentFilem()
ist nun Teil derclass
Nun innerhalb der Funktion, die Sie nicht haben, um zu deklarieren variable für
orderedList
; verwenden Siethis-><method/variable>
. Es sollte funktionieren..
. Das ist das problem die Frage ist zu Fragen.diese Frage stellt sich, wenn OP-Kommentare der code. In den späteren Teil der Frage, der OP fragt, 'warum geht es nicht wenn der code auskommentiert' ? (tatsächlich template-Klasse name den Namen des Objekts zulässig ist, durch compiler)
Ja, aber ich Rede hier über Ihre "Feste" - code, der das selbe problem hat. Der Kommentar "rufen Sie die Funktion wie dieses" wirklich nicht.
InformationsquelleAutor iammilind