制作动态对象数组问题?

时间:2012-12-01 18:33:16

标签: c++ arrays oop class dynamic

Candidate::Candidate ()
{

}

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

Candidate *list = new Candidate [10];

为什么?

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

2 个答案:

答案 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)

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