Pregunta

Estoy intentando compilar el siguiente código en 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;
}

Justo donde dice "Se produce un error aquí", aparece el siguiente error al compilar:"Error:No hay coincidencias para llamar a '(std::string) ()'.¿Cómo puedo resolver esto?

¿Fue útil?

Solución

No dé su cuerda y la función de su mismo nombre, y el error desaparecerá.

El compilador ha "olvidado" que existe una función con ese nombre, cuando se declara una variable local con el mismo nombre.

Otros consejos

La variable local sombras el nombre de la función global. Lo mejor es cambiar el nombre de la variable local, pero también es el operador alcance que le permite acceder específicamente el nombre global:

initialDecision = ::initialDecision();

Esto se llama "ocultar nombres" en C++.En este ejemplo particular, está declarando una variable local, que tiene el mismo nombre que una función en el ámbito del espacio de nombres.Después del punto de declaración de esa variable, la función se convierte en oculto, y cada vez que menciones el nombre 'initialDecision', el compilador asumirá con razón que te estás refiriendo a la variable.Como no se puede aplicar el operador de llamada de función '()' a una variable de tipo 'cadena', el compilador emite el mensaje de error.

En muchos casos, para hacer referencia a nombres ocultos, puede utilizar el operador de resolución de alcance '::'.Vea la respuesta del tío Ben, por ejemplo.

Trate de cambiar el nombre de la variable que no coincide con el nombre de la función.

El problema es que está repitiendo el nombre initialDecision tanto como una variable y una función. Esto confunde el compilador en gran medida. Trate de cambiar el nombre de la variable a otra cosa; se trabajará a continuación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top