【问题标题】:Making dynamic object array issue?制作动态对象数组问题?
【发布时间】:2012-11-19 16:32:45
【问题描述】:
Candidate::Candidate ()
{

}

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

Candidate *list = new Candidate [10];

为什么?

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

【问题讨论】:

  • 你确定你的候选类实际上有一个没有参数或所有默认参数的构造函数?无论如何,我建议std::vector
  • 编译器已经很好地回答了你的问题:)
  • 看看你的类定义,你确定你定义了一个构造函数吗?我和@chris 在一起,我也会使用向量

标签: c++ arrays oop class dynamic


【解决方案1】:

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

【讨论】:

  • 你的意思是说,当我定义一个不是默认的构造函数时,我也必须给它定义默认值?
  • 基本上,是的——如果你想允许创建你的类的实例而不传递参数(在这种情况下它不会被称为“默认”,因为你手动定义它,只是一个没有参数的构造函数)
  • 它仍然被称为默认构造函数,因为它在没有提供参数列表时被默认调用。区别术语是“编译器生成的”。
  • @icepack 它仍然是一个默认构造函数,只是不是默认的默认构造函数(除非你= default它)。
【解决方案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
};

【讨论】:

    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多