无法使派生类使用其基类的构造函数

时间:2013-11-11 02:22:36

标签: c++ inheritance constructor

所以我有一个名为package的类有一堆变量。我有所有的get / set方法和一个构造函数。

package header code

threeDay header code

twoDay header code

package class code

threeDay class code

twoDay class code

我有两个名为twoDay和threeDay的派生类继承了包类,需要使用它的构造函数。

包类的构造函数:

package::package(string sN, string sA, string sC, string sS, int sZ, string rN, string rA, string rC, string rS, int rZ, int w, int c) {

    this->senderName = sN;
    this->senderAddress = sA;
    this->senderCity = sC;
    this->senderState = sS;
    this->senderZip = sZ;

    this->receiverName = rN;
    this->receiverAddress = rA;
    this->receiverCity = rC;
    this->receiverState = rS;
    this->receiverZip = rZ;

    this->weight = w;
    this->cpo = c;


}

我一直在使用此代码作为threeDay标头中的构造函数:

threeDay(string, string, string, string, int, string, string, string, string, int,int,int);

我需要做的是让twoDay和ThreeDay能够使用构造函数。      我的意思是派生包需要能够使用基类构造函数。

我目前收到此错误:

threeDay.cpp:10:136: error: no matching function for call to ‘package::package()’

我从这个链接做了一些研究:http://www.cs.bu.edu/teaching/cpp/inheritance/intro/

和此链接:C++ Constructor/Destructor inheritance

所以好像我没有直接继承构造函数,我仍然需要定义它。如果是这样的话,为什么我的代码现在不工作?

但我似乎无法让它发挥作用。

一旦我让施工人员工作,它就会顺利航行。

1 个答案:

答案 0 :(得分:3)

由于package没有默认构造函数(即不带参数的构造函数),因此需要告诉派生类如何构建package

执行此操作的方法是在派生类的初始化列表中调用基类构造函数,如下所示:

struct Base
{
    Base(int a);
};

struct Derived : public Base
{
    Derived(int a, string b) : Base(a) { /* do something with b */ }
};