нет подходящего конструктора по умолчанию, доступная ошибка

c++ inheritance

908 просмотра

3 ответа

вот мой код:

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: «пакет»: нет подходящего конструктора по умолчанию, доступного

ошибка связана с наследованием конструктора базового класса, но я не знаю точно, почему код не работает. Помогите мне, пожалуйста.

Автор: Mwiti Источник Размещён: 12.11.2019 09:49

Ответы (3)


2 плюса

Решение

Конструктор for 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) {
    }
    //..
};
Автор: Peter Wood Размещён: 08.05.2013 07:12

4 плюса

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

вызывает базовый конструктор package(), потому что вы ничего не указали.

Добавьте строку package::package(){};в пакет классов :)

Автор: Melanie Размещён: 08.05.2013 06:42

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

};
Автор: olevegard Размещён: 08.05.2013 06:41
Вопросы из категории :
32x32