【问题标题】:C++ Inheritance - Running Parent Method in Child ClassC++ 继承 - 在子类中运行父方法
【发布时间】:2012-10-13 23:31:26
【问题描述】:

我的父类 Course 有方法 addStudent(Student s)。我的子类 BetterCourse 继承自 Course。每次我尝试运行 BetterCourse.addStudent(s) 时,都会收到以下错误:

错误:没有匹配的调用函数 ‘BetterCourse::addStudent(Student (&)())’ 注意:候选人是:void Course::addStudent(Student)

我知道它告诉我 addStudent() 尚未在 BetterCourse 中定义,它建议我使用父类 Course 中存在的那个。这让我感到困惑,因为围绕继承的整个想法不需要重新定义继承的函数和变量。

课程如下:

#include <iostream>
#include <string>
#include "Student.h"

using namespace std;

class Course
{

    protected:
        string id;
        string name;

    public:
        Course();
        Course(string id, string name);     
        void addStudent(Student s);
};

Course::Course()
{
   //code
}

Course::Course(string id, string name)
{
   //code
}

void Course::addStudent(Student s) 
{
   //code
}

更好的课程:

#include <iostream>
#include <string>
#include "Course.h"

using namespace std;

class BetterCourse : public Course
{
    public:
        BetterCourse(string id, string name) : Course(id,name){};
};

【问题讨论】:

标签: c++ inheritance


【解决方案1】:

从您的错误看来,您似乎是第一次接触到 C++ 最丑陋的部分。

这个:

Student s();

是函数声明 - 不是对象定义。 s 类型是 Student (*)() 所以当你打电话时:

BetterCourse bc; 
bc.addStudent(s);

你得到你的错误 - 你没有方法来添加返回学生的函数。

通过以下方式定义学生:

Student s;
Student s {}; // new C++11 way
Student s = Student(); // 

【讨论】:

  • 你说的很对!虽然我为 Student 定义了处理空参数创建的构造函数,但我并没有设计 addStudent() 来处理“空”对象。我添加了适当的参数,错误消失了。谢谢你:)
  • 它被称为最令人头疼的 Parse。
【解决方案2】:

听起来您实际上是在使用不适当的参数调用函数“addStudent”。您能否展示在 BetterCourse 对象上实际调用 addStudent 的代码?听起来您使用的是对学生的引用,而不是学生对象本身。

【讨论】:

    【解决方案3】:

    你不能调用 BetterCourse.addStudent(s) 你应该创建一个对象

    BetterCourse obj;
    obj.addStudent(s);
    

    应该有效

    如果你想调用 BetterCourse::addStudent(s) 而不是将 addStudent(s) 声明为静态方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 2020-02-14
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多