如何从C ++中的两级继承类调用函数?

时间:2016-09-12 00:30:47

标签: c++ inheritance multiple-inheritance

我在prog2.cpp中有一个主程序

#include "stack1.h"
int main(void){
stack1 x(100); // Declare a stack1 x of length 100
......
}

我需要从stack1.h调用这个stack1,但这个原始函数来自stack.h,是一个父类stack1.h:

class stack
{
....
public:
stack(int length);
....
}

stack1.h现在看起来像这样:

#include "stack.h"
class stack1: public stack{
...... //irrelevant code
}

问题是stack1 x(100)从MVS得到错误说:

  

错误:没有构造函数的实例" stack1 :: stack1"匹配参数列表。

我已经尝试了很多方法来摆脱这种情况,但它总会导致更多问题。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

子类的构造函数负责调用超类的构造函数。

你需要在stack1类中声明一个构造函数,它基本上将其参数转发给它的超类的构造函数:

struct stack1: public stack {

   stack1(int n) : stack(n) {}

};

你真的不是在这里调用一个函数。你正在调用一个构造函数。构造函数的规则是不同的。通常,使用子类调用从超类继承的方法没有问题。这很简单。但在这种情况下,它不是一个真正的方法,它是一个构造函数。适用不同的规则。

答案 1 :(得分:0)

如果您只想使用父类中的构造函数,可以使用using关键字。

class stack1 : public stack
{
    using stack::stack;//use all constructors of stack
    using stack::operator=; //use the assignment operators
};

但是:请记住,这个值会以不同的方式初始化值。