C++ 无法分配抽象类型的对象-但该类不是抽象的!(C+;+;)

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();

我正在做系统编程作业。 我必须建立一所大学。 我有一个课程班,有儿童班、计算机科学班、PG班和选修课

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);
}