fraction::fraction()
будет конструктором по умолчанию, а ваша структура не имеет его.
Как только вы объявили конструктор не по умолчанию fraction(int _numerator, int _denominator)
, компилятор перестал предоставлять свой собственный ctor по умолчанию (и вы не написали его для компенсации).
И вы пытаетесь вызвать (не существующий) ctor по умолчанию, когда делаете fraction result;
, так что теперь у вас проблемы;вы пытаетесь вызвать функцию, которая не существует, и компилятор любезно сообщает вам об этом.
Если вам не нужно / не нужно предоставлять собственный конструктор по умолчанию для структуры, но вы согласны с тем, что компиляторсгенерировал бы, если бы вы не предоставили свой собственный конструктор не по умолчанию, тогда вы можете сказать компилятору «пожалуйста, дайте мне ваш ctor по умолчанию для этой структуры» с помощью fraction() = default;
.Просто убедитесь, что это именно то, что вам нужно, и что вы на самом деле не хотите реализовывать свой собственный ctor по умолчанию (альтернативно, переделайте свой код, чтобы он не содержал вызова ctor по умолчанию).