Frage

Ich versuche, den folgenden Code in C ++

zu kompilieren
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;
}

Genau dort, wo es heißt „Der Fehler tritt hier“, ich die folgende Fehlermeldung beim Kompilieren: „Fehler:.? Kein Spiel für Call‚(std :: string) ()‘Wie kann ich dieses Problem zu beheben

War es hilfreich?

Lösung

Geben Sie nicht Ihren String und Ihre Funktion die gleichen Namen, und der Fehler wird weggehen.

Der Compiler hat „vergessen“, dass es eine Funktion mit diesem Namen, wenn Sie eine lokale Variable mit dem gleichen Namen erklären.

Andere Tipps

Die lokale Variable Schatten den Namen der globalen Funktion. Am besten ist es die lokale Variable umbenennen, aber es ist auch der Umfang Betreiber, die Sie speziell den globalen Namen zugreifen können:

initialDecision = ::initialDecision();

Dies wird als "Name Versteck" in C ++ bezeichnet. In diesem speziellen Beispiel deklarieren Sie eine lokale Variable, die den gleichen Namen wie eine Funktion in Namespace Umfang hat. Nach der Deklaration dieser Variablen die Funktion wird versteckt , und jedes Mal, wenn Sie den ‚initialDecision‘ erwähnen, die Compiler Namen wird zu Recht davon ausgehen, dass Sie auf die Variable verweisen. Da kann man nicht den Funktionsaufruf Operator ‚()‘ auf eine Variable vom Typ ‚string‘, gibt der Compiler die Fehlermeldung an.

In vielen Fällen, um versteckte Namen verweisen Sie den Bereichsauflösungsoperator verwenden können ‚::‘. Siehe UncleBens Antwort, zum Beispiel.

Versuchen Sie die Variable nicht entsprechen den Namen der Funktion umbenennen.

Das Problem ist, dass Sie den Namen initialDecision sowohl als eine Variable und eine Funktion wiederholen. Das verwirrt die stark Compiler. Versuchen Sie, die Variable auf etwas Umbenennung sonst; es wird dann zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top