2013-05-08 2 views
1

здесь не мой код:нет необходимости конструктора по умолчанию доступна ошибка

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

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

+4

пожалуйста узнать базовый синтаксис ... –

+0

Когда вы пишете свой собственный конструктор, по умолчанию один будет преодолено. 'twoDayPackage :: twoDayPackage (double FlatFee):' будет вызывать его, но он не существует. – Maroun

ответ

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) { 
    } 
    //.. 
}; 
+0

Каков синтаксис того, что вы предлагаете? – Mwiti

+1

ты мой друг, настоящий ниндзя. Большое спасибо. Мой код теперь работает точно так, как я этого хотел. Опять же, Muchos Gracias !!! – Mwiti

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

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

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

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

+1

+1, но конструктор по умолчанию означает, что он не будет инициализировать ни один из этих других членов (вес и т. Д.). Но да - это, вероятно, выходит за рамки этого вопроса :) –

+0

Moo-Juice - да, короткий ответ - не полный ответ. Я нахожу решение одной проблемы одновременно, когда вы пытаетесь изучить синтаксис C++. – Melanie

+1

Ну, три «струнных» будут. – chris

Смежные вопросы