Jump to content

O Retorno dos Membros VIP Junte-se ao Clube

Obtenha destaque e desfrute os benefícios exclusivos para VIP.
Clique Aqui

Reporte bugs e nos ajude a melhorar!

Nos ajude a descobrir bugs! Além de melhorar a comunidade.
Reporte aqui!

Conheça a Lotérica e arrisque sua sorte!

Descubra o quão sortudo você pode ser.
Saiba mais
Notícia
  • Junte-se ao Clube de membros VIP!
  • Teste sua sorte em nossa loteria e concorra a uma fortuna de webcoins!
Bimetal

Problema com sobrecarga de função

Recommended Posts

Fala galera. Eu estava estudando sobrecarga de função e me deparei com um problema. Eu tentei fazer duas funções de mesmo nome, onde uma soma dois inteiros e outra soma dois numeros decimais. O código é simples pois o intuito era praticar mesmo. Vou deixar abaixo o código e o erro. Quem puder ajudar eu agradeço.

#include <iostream>

int soma(int a, int b);
float soma(float a, float b);

int main()
{
    std::cout << soma(10, 5) << std::endl;
    std::cout << soma(10.741, 5.555) << std::endl;
}

int soma(int a, int b)
{
   return a + b;
}

float soma(float a, float b)
{
    return a + b;
}
 

||=== Build: Debug in Exercícios aleatórios (compiler: GNU GCC Compiler) ===|
In function 'int main()':
error: call of overloaded 'soma(double, double)' is ambiguous
note: candidate: int soma(int, int)
note: candidate: float soma(float, float)
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Share this post


Link to post
Share on other sites
Posted (edited)

O problema é que números inteiros, podem tanto ser considerados inteiros como pontos flutuantes, logo o compilador não sabe qual das duas funções chamar. Pra resolver isso, basta especificar o ponto flutuante na chamada do " float soma(float a, float b) " colocando "f" no final constantes.
 

#include <iostream>

int soma(int a, int b);
float soma(float a, float b);

int main()
{
    std::cout << soma(10, 5) << std::endl;
    std::cout << soma(10.741f, 5.555f) << std::endl;
}

int soma(int a, int b)
{
   return a + b;
}

float soma(float a, float b)
{
    return a + b;
}

Note que, se você criar duas variáveis do tipo float, e chamar a função com essas variáveis também vai funcionar pois o compilador vai saber que você tá passando float pra uma, inteiro pra outra.
 

Porém, isso é uma coisa do g++, não notei o mesmo comportamento no msvcpp.

Edited by TheSkytalos
mvcpp para msvcpp
  • Like 1

"May you be in heaven half an hour before the Devil knows you're dead"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...