Erro C ++: sem correspondência para a chamada
Pergunta
Estou tentando compilar o seguinte código em 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;
}
Bem onde diz "O erro ocorre aqui", recebo o seguinte erro ao compilar: "Erro: nenhum correspondência para a chamada '(std :: string) ()'. Como posso resolver isso?
Solução
Não dê à sua sequência e à sua função o mesmo nome, e o erro desaparecerá.
O compilador "esqueceu" que há uma função com esse nome, quando você declara uma variável local com o mesmo nome.
Outras dicas
A variável local sombreia o nome da função global. É melhor renomear a variável local, mas também há o operador de escopo que permite acessar especificamente o nome global:
initialDecision = ::initialDecision();
Isso é chamado de "nomes de esconderijo" em C ++. Neste exemplo em particular, você está declarando uma variável local, que tem o mesmo nome como uma função no escopo do espaço para nome. Após o ponto de declaração dessa variável, a função se torna escondido, e toda vez que você mencionar o nome 'InitialDecision', o compilador assumirá com razão que você está se referindo à variável. Como você não pode aplicar o operador de chamada de função '()' a uma variável de tipo 'string', o compilador emite a mensagem de erro.
Em muitos casos, para se referir a nomes ocultos, você pode usar o operador de resolução de escopo '::'. Veja a resposta dos tiobros, por exemplo.
Tente renomear a variável para não corresponder ao nome da função.
O problema é que você está repetindo o nome InitialDecision como uma variável e uma função. Isso confunde muito o compilador. Tente renomear a variável para outra coisa; vai então funcionar.