Although polymorphism is a widely useful phenomena in C++ yet it can be quite complicated at times. For instance consider the following code snippet:
CPP
#include<iostream>
using namespace std;
void test( float s, float t)
{
cout << "Function with float called ";
}
void test( int s, int t)
{
cout << "Function with int called ";
}
int main()
{
test(3.5, 5.6);
return 0;
}
|
It may appear that the call to the function test in main() will result in output “Function with float called” but the code gives following error:
In function 'int main()':
13:13: error: call of overloaded 'test(double, double)' is ambiguous
test(3.5,5.6);
It’s a well known fact in Function Overloading, that the compiler decides which function needs to be invoked among the overloaded functions. If the compiler can not choose a function amongst two or more overloaded functions, the situation is -” Ambiguity in Function Overloading”.
- The reason behind the ambiguity in above code is that the floating literals 3.5 and 5.6 are actually treated as double by the compiler. As per C++ standard, floating point literals (compile time constants) are treated as double unless explicitly specified by a suffix [See 2.14.4 of C++ standard here). Since compiler could not find a function with double argument and got confused if the value should be converted from double to int or float.
Rectifying the error: We can simply tell the compiler that the literal is a float and NOT double by providing suffix f. Look at the following code :
CPP
#include<iostream>
using namespace std;
void test( float s, float t)
{
cout << "Function with float called ";
}
void test( int s, int t)
{
cout << "Function with int called ";
}
int main()
{
test(3.5f, 5.6f);
return 0;
}
|
Output:
Function with float called
If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
27 Mar, 2023
Like Article
Save Article