1
resposta

Problema com o abs e "call of overload 'abs (double') is ambiguous.

Quando a linha de código está deste jeito funciona normalmente: pontosperdidos += abs(chute - NUM)/2.0;

Entretanto se eu adiciono parênteses [pontosperdidos += abs((chute - NUM)/2.0);] o código não roda por causa do erro do título. Eu vi na internet que isso ocorre quando o compilador não consegue escolher entre duas ou mais funções, mas não consigo ver como isso se daria nesse caso. Não pretendo resolver o problema porque já vi como fazer o código rodar corretamente, quero apenas entender o porquê desse erro.

Grato.

1 resposta

Quando tiver uma dúvida, coloque aqui o código de preferência na integra. É importante saber quais são os tipos das variáveis.

Para um valor do tipo float use a função fabs.

pontos_perdidos =  fabs((chute - NUM)/2.0);

Repare que, caso não seja, o argumento da função se torna do tipo ponto flutuante após a divisão por 2.0.

"call of overload 'abs (double') is ambiguous"

O compilador escolhe a funções de mesmo nome (mas tipo e número de argumento distinto) usando como critério os tipos dos argumentos e a ordem. Quando você colocou os parênteses, você mudou o tipo do argumento e criou um caso em que o compilador não encontrou nenhum protótipo de função correspondente.

Se quiser saber mais, pesquise sobrecarga de funções c++.