I\'v read several posts here about this kind of errors, but I wasn\'t able to solve this one... Has soon I define the operator int and the function f, fails to compile. I teste
You have several options to fix your problem:
int to Fraccao: Make the constructor explicit.Forbid implicit conversion from Fraccao to int: Make the conversion operator explicit.
Convert manually on the callers side, given Fraccao f; int i; either int(f)+i or f+Fraccao(i).
Provide additional overloads to resolve the ambiguity:
Fraccao operator +(const Fraccao &a, const Fraccao &b);
Fraccao operator +(const int a, const Fraccao &b);
Fraccao operator +(const Fraccao &a, const int b);
The latter probably means you also want:
Fraccao & operator+=(const Fraccao &fra);
Fraccao & operator+=(const int i);
And finally, if you want the latter, you can use libraries like Boost.Operators or my df.operators to support you and avoid writing the same forwarders over and over again.