C++继承出错

C++ inheritance getting error

本文关键字:出错 继承 C++      更新时间:2023-10-16

我在弄清楚我遇到的这个错误时遇到了一些麻烦。所以我有一个人类,和一个学生子类。

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不是默认可构造的,因此必须在初始值设定项列表中对其进行初始化。