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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top