如何从 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 初始化值与您预期的不同。
我在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 初始化值与您预期的不同。