Estude o seguinte código
Existe um o erro produzido pelo terceiro .
- Explique o motivo deste erro.
- Corrija o erro sem alterar o conteúdo entre parêntesis.
Passo 1
E aí galerinha. Vamos pra mais um exercício maneiro.
- Explique o motivo deste erro.
- Corrija o erro sem alterar o conteúdo entre parêntesis.
Esse é um daqueles exercício em que o código tem um erro. Esse é um erro um tanto difícil de encontrar apenas olhando, mas pra nossa sorte a questão já informou que o erro está no terceiro , o da linha 14.
O erro é sutil, e pra entender a gente precisar olhar antes pra definição de template nas linhas 04 e 05
Olha só, na declaração da função-template definimos os dois parâmetros e usando o mesmo tipo genérico .
Agora vamos olhar pra linha 14, que é onde o compilador avisa do erro. Nessa linha, a gente entrega pra função dois parâmetros de tipos diferentes. O é um inteiro, e o é um .
Quando o compilador tentar rodar essa linha ele vai ficar doidinho. Pois ele não vai saber se o tipo genérico deve ser considerado como , ou se deve ser considerado como .
Se você tentar rodar esse código, o seu compilador vai informar um erro parecido com esse:
Que basicamente está dizendo “não existe um template chamado em que os parâmetros possam ter tipos diferentes!”
Passo 2
Belezinha. Identificamos o erro, e já explicamos o motivo de ele acontecer. Mas como corrigimos isso?
Uma forma de corrigir o erro seria trocando o valor entre parêntesis, para que os dois valores sejam do mesmo tipo. Porém a questão falou que a gente não pode fazer isso.
A forma mais fácil de corrigir esse erro é forçando que o valor de assuma um tipo predeterminado. Pra fazer isso, a gente pode colocar o tipo que queremos definir dentro de chaves logo depois do nome da função e antes dos parêntesis:
Então, pra corrigir o código, é só a gente ir na linha 14 e forçar que a função template utilize um tipo específico. Para garantir maior precisão, vou forçar o uso do tipo
Passo 2
Agora o código está corrigido! Mas pra garantir, vamos colocar o código pra rodar e ver o resultado:
E aí está. Tudo rodando certinho!
Até a próxima questão, galera!
Resposta
Ei, a resposta está no passo a passo :)