Question

Je suis en train de compiler le code suivant dans 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;
}

Droit où il est dit « Une erreur se produit ici », je reçois l'erreur suivante lors de la compilation: « Erreur:.? Pas de résultats pour Call to « (std :: string) () » Comment puis-je résoudre ce

Était-ce utile?

La solution

Ne donnez pas votre chaîne et votre fonction du même nom, et l'erreur disparaîtra.

Le compilateur a « oublié » qu'il ya une fonction avec ce nom, lorsque vous déclarez une variable locale du même nom.

Autres conseils

La variable locale ombres le nom de la fonction globale. Il est préférable de renommer la variable locale, mais il y a aussi l'opérateur de portée qui vous permet d'accéder spécifiquement le nom global:

initialDecision = ::initialDecision();

Ceci est appelé « nom caché » en C ++. Dans cet exemple particulier, vous déclarez une variable locale, qui a le même nom en fonction de la portée d'espace de noms. Après le point de la déclaration de cette variable la fonction devient caché , et chaque fois que vous mentionnez le nom « initialDecision » le compilateur suppose à juste titre que vous faites référence à la variable. Puisque vous ne pouvez pas appliquer l'opérateur d'appel de fonction « () » à une variable de type « string », le compilateur émet le message d'erreur.

Dans de nombreux cas afin de se référer à des noms cachés, vous pouvez utiliser l'opérateur de résolution de portée « :: ». Voir la réponse Unclebens, par exemple.

Renommez la variable correspond pas au nom de la fonction.

Le problème est que vous répétez le nom initialDecision à la fois comme une variable et une fonction. Ce compilateur embrouille beaucoup. Renommez la variable à autre chose; il sera alors travailler.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top