Candidate::Candidate ()
{
}
它没有做任何事情。 不按原样编写它不能执行该行:
Candidate *list = new Candidate [10];
为什么?
Error: no default constructor exists for the class "Candidate"
答案 0 :(得分:2)
要允许动态数组分配new Candidate[10]
,必须提供Candidate
的默认构造函数。也就是说,它必须能够不参数。如果为Candidate
提供任何自己的构造函数,无论它们采用多少个参数,都不会定义通常由编译器自动定义的隐式默认构造函数。因此,即使它的身体是空的,你也必须自己提供它。见§12.1/ 5:
类
X
的默认构造函数是类X
的构造函数,可以在不带参数的情况下调用。如果类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
};
答案 1 :(得分:1)
您的班级中可能还有一个额外的构造函数。如果您定义了任何构造函数,编译器将不会生成默认构造函数。