У меня есть следующий класс:C++ не может реализовать конструктор по умолчанию
class Fraction {
private:
int x;
int y;
public:
// Constructors
Fraction(long x = 0, long y = 1);
Fraction(const Fraction&)=default;//here is the problem
virtual ~Fraction();
};
Я пытаюсь отключить по умолчанию C++ конструктора для реализации моих (я намерен использовать его для копирования). Итак, я объявил это как дефолт. Но, когда я пытаюсь реализовать:
Fraction::Fraction(const Fraction&){}
Компилятор выдает следующее сообщение об ошибке на меня:
./src/Fraction.cpp:16:1: error: definition of explicitly-defaulted ‘Fraction::Fraction(const Fraction&)’ Fraction::Fraction(const Fraction&){^In file included from ../src/Fraction.cpp:8:0: ../src/Fraction.h:22:2: error: ‘Fraction::Fraction(const Fraction&)’ explicitly defaulted here Fraction(const Fraction&)=default;
Есть ли способ это исправить? Что я делаю неправильно? Я нашел некоторые статьи о дефолтах, но ничего, что могло бы помочь мне исправить эти ошибки.
Если вы хотите отключить конструктор копирования, используйте '= delete', а не' = default'. –
'= default' сообщает компилятору использовать стандартную реализацию. Это также означает, что вы не можете предоставить свой собственный. Если вы _don't_ хотите, чтобы компилятор его создал, просто удалите '= default'. – Zeta
* Конструктор по умолчанию * и * конструктор копирования * - это две разные вещи. – dlask