C++继承出错
C++ inheritance getting error
我在弄清楚我遇到的这个错误时遇到了一些麻烦。所以我有一个人类,和一个学生子类。
Person 类具有以下构造函数:
Person(const string &name)
{ this->name = name;
}
学生类具有以下构造函数:
Student::Student(const string &name, int regNo)
{ this->name = name;
this->regNo = regNo;
}
但是,当我尝试编译 Student 类时,构造函数出现此错误:
在构造函数 'Student::Student(const string&, int)' 中:
错误:调用"Person::P erson()"没有匹配函数
我是C++新手,所以我不知道为什么会出现这个错误,但这显然与人的继承有关。
您正在尝试调用Person
的默认构造函数,但它没有。无论如何,看起来您要做的是调用其单参数构造函数:
Student::Student(const string& name, int regNo) : Person(name), regNo(regNo)
{
}
类似地,在 Person
的构造函数中使用构造函数初始化列表:
Person(const string& name) : name(name) {}
这样,您将数据成员初始化为所需的值,而不是默认初始化它们,然后为它们分配新值。
您需要像这样从基类委托给正确的 ctor:
Student::Student(const string &name, int regNo)
: Person( name )
{
this->regNo = regNo;
}
请注意,这使用初始值设定项列表,因此您可以使用更惯用
的Student::Student(const string &name, int regNo)
: Person( name ), regNo( regNo )
{
}
对于Person
CTOR:
Person(const string &name)
: name( name )
{
}
初始值设定项列表用于初始化基类和成员变量,您未显式放入的所有内容都是默认构造的(在您的代码中,它稍后在 ctor 的主体中分配)。由于Person
不是默认可构造的,因此必须在初始值设定项列表中对其进行初始化。
相关文章:
- 继承函数的重载解析
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 继承期间显示未知行为的子类
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 在 c++ 中,当一个类继承头文件中的另一个类时出错
- 尝试从 C++ 中的构造函数从类继承时出错
- C++继承出错
- 使用继承C++时出错
- 从具有多个参数的模板类继承时出错
- 实例化没有继承的对象时出错
- 第一个帖子!对头文件使用继承时出错
- 在C++中继承类时出错:模板参数推导/替换失败
- 类继承出错
- 从模板类继承时出错
- 计算继承方法时出错
- C++ 继承:调用基类构造函数时出错 C2614