Еще одна вещь, которую следует отметить с вашим кодом, прежде чем вернуться к нам с очень похожим вопросом: лучше убрать функции operator int
и operator double
. Они вызовут у вас сильную головную боль. Давайте сделаем несколько примеров:
Number a, b;
1 + b;
// ambiguous: operator+(int, int) or
// operator+(Number, Number) ?
// did you intend to use those for this case?
float x = a;
// ambiguous: from int -> float or
// double -> float ?
В исходной ситуации у вас сложение было неоднозначным, потому что были рассмотрены встроенные операторы operator+(double, double)
и operator+(int, int)
, и они были одинаково хороши. Другие решили эту проблему. Но прежде чем начать и столкнуться с этими другими проблемами, лучше удалите функции преобразования и вставьте явные функции, такие как asDouble
или что-то подобное.