【问题标题】:C++ inheritance getting errorC ++继承出现错误
【发布时间】:2014-01-07 07:15:41
【问题描述】:

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

Person 类具有以下构造函数:

Person(const string &name)
        {   this->name = name;
        }

Student 类具有以下构造函数:

Student::Student(const string &name, int regNo)
{ this->name = name;
  this->regNo = regNo;
}

当我尝试编译 Student 类时,构造函数出现此错误:

在构造函数中'Student::Student(const string&, int)':

错误:没有匹配的函数调用'Person::Person()'

我是 C++ 新手,所以我不知道为什么会出现这个错误,但这显然与 Person 的继承有关。

【问题讨论】:

    标签: c++ inheritance


    【解决方案1】:

    您正试图调用Person 的默认构造函数,但它没有。无论如何,看起来你想要做的就是调用它的单参数构造函数:

    Student::Student(const string& name, int regNo) : Person(name), regNo(regNo)
    {
    }
    

    同样,使用Person的构造函数中的构造函数初始化列表:

    Person(const string& name) : name(name) {}
    

    这样,您初始化您的数据成员到所需的值,而不是默认初始化它们然后分配新值。

    【讨论】:

      【解决方案2】:

      您需要像这样从基类委托给正确的 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 不是默认可构造的,您必须在初始化列表中对其进行初始化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 2016-03-12
        • 2011-07-04
        • 1970-01-01
        • 2016-05-15
        • 2016-03-19
        相关资源
        最近更新 更多