I’m working on a C++ program for class, and my compiler is complaining about an “ambiguous” function call. I suspect that this is because there are several functions defined with different parameters.
How can I tell the compiler which one I want? Aside from a case-specific fix, is there a general rule, such as typecasting, which might solve these kinds of problems?
Edit:
In my case, I tried calling abs() inside of a cout statement, passing in two doubles.
cout << "Amount is:" << abs(amountOrdered-amountPaid);
Edit2:
I’m including these three headers:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
Edit3:
I’ve finished the program without this code, but in the interest of following through with this question, I’ve reproduced the problem. The verbatim error is:
Call to ‘abs’ is ambiguous.
The compiler offers three versions of abs, each taking a different datatype as a parameter.
What’s happened is that you’ve included
<cstdlib>(indirectly, since it’s included byiostream) along withusing namespace std;. This header declares two functions instdwith the nameabs(). One takes and returnslong long, and the other returnslong. Plus, there’s the one in the global namespace (that returnsint) that comes from<stdlib.h>.To fix: well, the
abs()that takes double is in<cmath>, and that will actually give you the answer you want!