没有合适的默认构造函数可用

no appropriate default constructor available error

本文关键字:构造函数 默认      更新时间:2023-10-16

下面是我的代码:

class package
{
protected:
    string name;
    string city;
    string state;
    int zip;
    double weight;
    double costPerOunce;
public:
    package::package(string Name, string City, string State, int Zip, double Weight, double CostPerOunce):
      name(Name), city(City), state(State),
      zip(Zip), weight(Weight), costPerOunce(CostPerOunce)
      {
      }
      double calculateCost()
    {
        return (weight * costPerOunce);
    }
};
class twoDayPackage: public package
{
protected:
    double flatFee;
public:
    twoDayPackage::twoDayPackage(double FlatFee):
      flatFee(FlatFee)
      {
      }
    double calculateCost()
    {
        return (weight * costPerOunce) + flatFee;
    }
};
int main()
{

    system ("pause");
    return 0;
}

我尝试运行这段代码,我得到的错误如下:"package":没有合适的默认构造函数

错误与基类构造函数的继承有关,但我不知道代码不运行的确切原因。

twoDayPackage::twoDayPackage(double FlatFee):
  flatFee(FlatFee)

调用基本构造函数package(),因为您没有指定任何其他内容。

在类包中添加一行package::package(){};:)

您需要一个package的构造函数。此外,在声明构造函数时不需要package::package(...)(这是在cpp文件中定义它时使用的)。只要package(...)就可以了。

class package
{
protected:
    string name;
    string city;
    string state;
    int zip;
    double weight;
    double costPerOunce;
public:
    package()
    {}
    // / You don't need package:: that's only needed when you define the func in cpp
    package(
        string Name, string City, string State, int Zip, 
        double Weight, double CostPerOunce
    )
        : name(Name), city(City), state(State),
        zip(Zip), weight(Weight), costPerOunce(CostPerOunce)
    {
    }
    double calculateCost()
    {
        return (weight * costPerOunce);
    }
};

twoDayPackage的构造函数将首先创建package,然后再创建flatFee。因为你没有告诉它怎么做,它寻找一个默认的方法来构造package

当你构建twoDayPackage时,你需要给它构建底层package所需的一切。或者让它决定传递给package构造函数的值。

传入所需的参数如下:

class twoDayPackage {
public:
    twoDayPackage(string Name, string City, string State, int Zip, double Weight, double CostPerOunce, double flatFee) :
    package(Name, City, State, Zip, Weight, CostPerOunce),
    flatFee(flatFee) {
    }
    //..
};