cok@islsun.Kodak.COM (David Cok) (10/24/90)
Consider this program, which gives compilation errors. It is boiled out of
a larger more useful context.
class Byte;
class Int;
class Float;
class Double {
public:
double v;
Double();
Double(const Double&);
Double(Byte);
Double(Int);
Double(Float);
friend Double operator + (Double a, Double b);
};
class Float {
public:
float v;
Float();
Float(const Float&);
Float(Int);
Float(Byte);
friend Float operator + (Float a, Float b);
};
class Int {
public:
int v;
Int();
Int(const Int&);
Int(Byte);
friend Int operator + (Int a, Int b);
};
class Byte {
public:
unsigned char v;
Byte();
Byte(const Byte&);
friend Byte operator + (Byte a, Byte b);
};
main()
{
Byte b;
Int i;
b+i;
}
Sun C++ 2.0 on a SparcStation 1 says the following:
CC ambiguity.c:
"ambiguity.c", line 64: error: ambiguous argument for operator +(): void (Double , Double ) and void (Float , Float )
"ambiguity.c", line 64: warning: result of + expression not used
1 error
(Line 64 is the b+i expression.)
The warning is obvious, but I do not understand the error. Why won't the
compiler choose to convert variable b to Int and then use the operator+ for
Ints? The second argument is an exact match for an Int.
If I replace the constructors (like Double::Double(Byte);) with operators
(like Byte::operator(Double)), the problem is the same.
Will anyone give me some advice?
Please respond via e-mail (and to the net if you wish, of course).
David R. Cok, Eastman Kodak Company, 716-477-7086
e-mail: cok@Kodak.COM