CPP在不需要时会要求默认构造函数

时间:2019-12-02 11:25:09

标签: c++ constructor default

我的代码:

#include "BaseProduct.h"

BaseProduct::BaseProduct(
    const ProductBaseType baseType,
    const int id,
    const int quantity,
    const Location location
    ) {
    _baseType = baseType;
    _id = id;
    _quantity = quantity;
    _location = location;
}

我得到的错误:

no default constructor exists for class "Location"

我知道Location没有默认的构造函数,它的目的是... 如果有任何相关性,我正在使用VSCode。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可能想要重写构造函数以使用初始化程序列表形式。否则,默认的构造函数将用于您的成员,然后才能在构造函数主体中对其进行初始化:

上面链接的文档(重点是我的)中的报价:

  

在构成构造函数功能体的复合语句开始执行之前,所有直接基数,虚拟基数和非静态数据成员的初始化已完成。 成员初始化器列表是可以指定这些对象的非默认初始化的位置。对于无法默认初始化的成员,例如引用成员和const限定类型的成员,必须指定成员初始值设定项。

示例:

BaseProduct::BaseProduct(
    const ProductBaseType baseType,
    const int id,
    const int quantity,
    const Location location
    ) : _baseType(baseType), _id(id), _quantity(quantity), _location(location) { }

答案 1 :(得分:1)

使用成员初始化程序列表:

BaseProduct::BaseProduct(
    const ProductBaseType baseType,
    const int id,
    const int quantity,
    const Location location
  ) : // the colon marks the start of the member initializer list
    _baseType(baseType),
    _id(id),
    _quantity(quantity),
    _location(location)
  {
      // body of ctor can now be empty
  }
}

这使您可以使用无法默认构造的对象组成。