3

我的父类 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){};
};
4

3 回答 3

4

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

这个:

Student s();

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

BetterCourse bc; 
bc.addStudent(s);

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

通过以下方式定义学生:

Student s;
Student s {}; // new C++11 way
Student s = Student(); // 
于 2012-10-13T23:41:00.323 回答
0

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

BetterCourse obj;
obj.addStudent(s);

应该管用

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

于 2012-10-13T23:37:31.980 回答
0

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

于 2012-10-13T23:35:13.147 回答