我有以下课程:
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();
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试禁用默认的C++构造函数来实现我自己的(我打算用它来复制).所以,我宣布它是默认的.但是,当我试图实现它时:
Fraction::Fraction(const Fraction&){}
Run Code Online (Sandbox Code Playgroud)
编译器向我抛出以下错误:
./src/Fraction.cpp:16:1:错误:显式默认定义'Fraction :: Fraction(const Fraction&)'Fraction :: Fraction(const Fraction&){^包含在../src/Fraction文件中. cpp:8:0:../ src/Images.h:22:2:错误:'Fraction :: Fraction(const Fraction&)'在此明确默认为Fraction(const Fraction&)=默认值;
有没有办法解决它?我做错了什么?我发现了一些关于默认值的文章,但没有任何可以帮我修复这些错误的文章.
= default告诉编译器使用默认实现.这也意味着您无法提供自己的.如果您不希望编译器创建一个,只需删除= default:
class Fraction {
// ...
Fraction(const Fraction&); // NO =default
};
Run Code Online (Sandbox Code Playgroud)
顺便说一句,"默认构造函数"是在您不提供任何参数时调用的构造函数,例如
Fraction my_frac; // default constructor called
Run Code Online (Sandbox Code Playgroud)
如果要禁用默认构造函数,请使用=delete:
class Fraction{
public:
Fraction() = delete;
}
Run Code Online (Sandbox Code Playgroud)
请记住,您当前Fraction(long, long)提供的是默认参数,因此它可以作为默认构造函数.