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

How to call function from a two-level inherited class in C++?

我在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:

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

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

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

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

Error: no instance of constructor "stack1::stack1" matches the argument list.

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

子class的构造函数有责任调用超级class的构造函数。

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

struct stack1: public stack {

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

};

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

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

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

但是:请记住,此 miht 初始化值与您预期的不同。