我的父类Course使用addStudent(Student s)方法。我的孩子班,BetterCourse,继承自Course。每次我尝试运行BetterCourse.addStudent(s)时,都会出现以下错误:
错误:没有匹配的调用函数 'BetterCourse :: addStudent(学生(&)())'注意:候选人是:void课程:: addStudent(学生)
我理解它告诉我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
}
BetterCourse:
#include <iostream>
#include <string>
#include "Course.h"
using namespace std;
class BetterCourse : public Course
{
public:
BetterCourse(string id, string name) : Course(id,name){};
};
答案 0 :(得分:4)
从你的错误看来,你第一次看到了C ++中最丑陋的部分。
此:
Student s();
是函数声明 - 不是对象定义。 s
类型为Student (*)()
,因此当您致电:
BetterCourse bc;
bc.addStudent(s);
您收到错误 - 您没有方法添加返回Student的函数。
通过以下方式定义学生:
Student s;
Student s {}; // new C++11 way
Student s = Student(); //
答案 1 :(得分:0)
听起来你实际上正在调用这个函数&#39; addStudent&#39;用不恰当的论点。你能在BetterCourse对象上显示实际调用addStudent的代码吗?听起来你正在使用对学生的引用而不是学生对象本身。
答案 2 :(得分:0)
你不能调用BetterCourse.addStudent(s)你应该创建一个对象
BetterCourse obj;
obj.addStudent(s);
应该有效
如果你想调用BetterCourse :: addStudent(s)而不是将addStudent声明为静态方法