Candidate::Candidate ()
{
}
它没有做任何事情。不写它不能执行该行:
Candidate *list = new Candidate [10];
为什么?
Error: no default constructor exists for the class "Candidate"
为了允许您的动态数组分配,必须有new Candidate[10]
一个默认的构造函数。Candidate
也就是说,它必须能够不接受任何参数。如果您为 提供任何自己的构造函数Candidate
,无论它们采用多少参数,通常由编译器自动定义的隐式默认构造函数都不会被定义。因此你必须自己提供它,即使它的身体是空的。见§12.1/5:
类的默认构造函数是可以在没有参数的情况下调用
X
的类的构造函数。X
如果 class 没有用户声明X
的构造函数,则没有参数的构造函数被隐式声明为默认值 (8.4)。
您的类可以如下所示,因为编译器将隐式定义一个默认的默认构造函数:
class Candidate
{ }; // Compiler provides a default constructor
但是一旦你给它任何其他构造函数,就不再提供隐式默认构造函数:
class Candidate
{
public:
Candidate(int x);
// A user-defined constructor is provided so the default constructor
// must be defined explicitly
};
你的类中可能有一个额外的构造函数。如果您定义了任何构造函数,编译器将不会生成默认构造函数。