Re: Conversion, operator overloading
Am 11.12.2012 21:30, schrieb TS:
recently I got a problem related to conversion and operator overloading.
With the code below
class A {};
A operator +(const A& lhs, const A& rhs) { ... };
class B {
public:
operator A() { ... }
operator int() { ... }
};
int main() {
B ba, bb;
ba + bb; // error
short val = (short) ba;
return 0;
}
I got the error from gcc:
error: ambiguous overload for ?operator+? in ?ba + bb?
note: candidates are: operator+(int, int) <built-in>
note: A operator+(const A&, const A&)
Yes, this error is to be expected, because your class does provide two
conversions to types that provide support for binary operator+.
I'm wondering how I can get rid of the error. Specifically, how can I
make the compiler not consider the built-in type when considering
operator overloading? The code in main is sort of legacy code, and can't
be changed, but we are free to play with class A and B.
Don't provide these two conversion functions. One possible alternative
is to let B derive from A, because base classes have higher priorities
in the code context. While derivation is a quick-fix, it requires
further analysis, whether this is the "right" approach. If only
operator+ is involved, an alternative solution could be to let B provide
an operator+ overload that is implemented with some member of A.
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]