2

这是我的代码:

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;
}

我尝试运行此代码,我得到的错误如下:错误 C2512:'package':没有适当的默认构造函数可用

该错误与基类构造函数的继承有关,但我不知道为什么代码没有运行。请帮我。

4

3 回答 3

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

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

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

于 2013-05-08T06:42:23.443 回答
3

你需要一个包的构造函数。此外,您不需要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);
    }

};
于 2013-05-08T06:41:37.480 回答
2

的构造函数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) {
    }
    //..
};
于 2013-05-08T07:12:31.820 回答