Линия:
d = (dummy)ob1
пытается сделать следующее:
- Построить
dummy
объект из obj1
- Назначить этот временный
dummy
объект d
Часть 1 - это то, что вызывает проблемы. Чтобы создать временный объект dummy
, компилятор должен найти какой-то способ преобразования obj1
в тип, из которого можно построить dummy
. Он находит, что есть два способа сделать это:
- Звоните
operator int
- Звоните
operator dummy
Вы не говорите ему, какую из этих двух альтернатив вы хотите использовать, и поэтому код неоднозначен.
Ваша проблема может быть воссоздана (с удалением посторонних частей) следующим образом:
struct t_1 {};
struct t_2 {};
struct sample {
operator t_1() const{ return t_1(); }
operator t_2() const{ return t_2(); }
};
void f(t_1) {}
void f(t_2) {}
int main() {
sample obj1;
//overload resolution will fail
//disambiguate with f(obj1.operator t_1()) or f(obj1.operator t_2())
f(obj1);
}