C++ Error: No Match for Call
Ich versuche zu kompilieren, den folgenden code in C++
string initialDecision ()
{
char decisionReviewUpdate;
cout << "Welcome. Type R to review, then press enter." << endl;
cin >> decisionReviewUpdate;
//Processing code
}
int main()
{
string initialDecision;
initialDecision=initialDecision();
//ERROR OCCURS HERE
//More processing code
return 0;
}
Rechten Seite, wo es sagt "Fehler hier", bekomme ich die folgende Fehlermeldung beim kompilieren: "Fehler: No Match for Call to '(std::string) ()'. Wie kann ich dies beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht geben, Ihrem string und Ihrer Funktion mit dem gleichen Namen, und der Fehler wird Weg gehen.
Hat der compiler "vergessen", dass es eine Funktion mit diesem Namen, wenn Sie deklarieren eine lokale variable mit dem gleichen Namen.
Die lokale variable Schatten den Namen der globalen Funktion. Am besten ist es, benennen Sie die lokalen Variablen, aber es ist auch der scope-operator können Sie gezielt den Zugriff auf die globalen Namen:
Dieser heißt "name ausblenden" in C++. In diesem speziellen Beispiel, werden Sie deklarieren eine lokale variable, die hat den gleichen Namen wie eine Funktion in namespace-Gültigkeitsbereich. Nach dem Punkt der Deklaration dieser Variablen die Funktion wird versteckt, und jedes mal, wenn Sie erwähnen die 'initialDecision' name der compiler zu Recht davon ausgegangen, dass Sie auf die variable. Da können Sie nicht anwenden der function-call-operator " ()", um eine variable vom Typ "string", der compiler gibt die Fehlermeldung aus.
In vielen Fällen, um auf versteckte Namen, die Sie können, verwenden Sie den scope-resolution-operator '::'. Sehen UncleBens Antwort, zum Beispiel.
Versuchen Sie das umbenennen der Variablen nicht mit dem Namen der Funktion.
Das problem ist, Sie wiederholen den Namen initialDecision als eine variable und eine Funktion. Das verwirrt den compiler erheblich. Versuchen Sie das umbenennen der variable etwas anderes; es wird dann funktionieren.