C++ 无法分配抽象类型的对象-但该类不是抽象的!(C+;+;)
我正在做系统编程作业。 我必须建立一所大学。 我有一个课程班,有儿童班、计算机科学班、PG班和选修课C++ 无法分配抽象类型的对象-但该类不是抽象的!(C+;+;),c++,C++,我正在做系统编程作业。 我必须建立一所大学。 我有一个课程班,有儿童班、计算机科学班、PG班和选修课 class Course { public: virtual void teach(); virtual void reg(Student &s)=0; std::string getName(); std::string getDepartment(); int getSemester(); int getMinGrade();
class Course
{
public:
virtual void teach();
virtual void reg(Student &s)=0;
std::string getName();
std::string getDepartment();
int getSemester();
int getMinGrade();
void addStudent(Student *s);
void removeStudent(Student *s);
protected:
std::string _department;
std::string _name;
int _semester;
int _minGrade;
std::vector<Student*> studentsList;
};
class CSCourse : public Course
{
public:
CSCourse();
CSCourse(std::string department, std::string name, int semester, int mingrade);
~CSCourse();
std::string getName();
std::string getDepartment();
int getSemester();
int getMinGrade();
void addStudent(Student *s);
void removeStudent(Student *s);
};
它给了我“不能分配抽象类型CS课程的对象”。
PG和选修课也是如此
但是,在我对这门课的定义中,CS课程并不是抽象的 您继承了一个抽象类,这很好,但您从未实现基类定义的纯虚函数 此外,在基类中还需要一个虚拟析构函数;) 编辑:
您还做了其他可能不必要的事情,比如重新定义大多数派生类函数。我打赌它们的实现与您的基类完全相同?这个
CSCourse
类是抽象的
您已在课程
中声明了纯虚拟函数reg
,但未在CSCourse
中提供实现
毫无疑问,编译器也告诉了您这一点。您还没有在派生类中实现纯虚拟函数
reg
:
virtual void reg(学生&s)=0代码>
因此,是的,您的类是抽象的。附带说明:在基类中创建一个虚拟析构函数。
std::vector<Course*> coursesVector
if (dp == "CS")
{
CSCourse *csCourse = new CSCourse(dp, name, semester, minGrade);
coursesVector.push_back(csCourse);
}