0
Candidate::Candidate ()
{

}

它没有做任何事情。不写它不能执行该行:

Candidate *list = new Candidate [10];

为什么?

Error: no default constructor exists for the class "Candidate"
4

2 回答 2

2

为了允许您的动态数组分配,必须有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
};
于 2012-12-01T18:39:50.453 回答
1

你的类中可能有一个额外的构造函数。如果您定义了任何构造函数,编译器将不会生成默认构造函数。

于 2012-12-01T18:36:09.367 回答