我在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"匹配参数列表。
我已经尝试了很多方法来摆脱这种情况,但它总会导致更多问题。我该如何解决这个问题?
答案 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
};
但是:请记住,这个值会以不同的方式初始化值。