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

c++ inheritance

908 просмотра

3 ответа

30 Репутация автора

вот мой код:

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 Источник Размещён: 08.05.2013 06:39

Ответы (3)


3 плюса

4165 Репутация автора

Вам нужен конструктор для пакета. Также вам не нужно 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

4 плюса

714 Репутация автора

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

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

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

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

2 плюса

18003 Репутация автора

Решение

Конструктор 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
Вопросы из категории :
32x32