不能分配抽象类型的对象 - 但类不是抽象的!(C++)
cannot allocate object of abstract type - but the class is not abstract! (C++)
我正在做系统编程作业。我必须实施一所大学。我有一个课程类,有子类计算机科学课程类,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);
};
(PG课程和选修课程儿童课程相同)在课程类中的函数中(不是无效的,如getSemester等)。我只是dynamic_cast弄清楚它是什么类型的课程。
我遇到了这个问题:
课程向量是:
std::vector<Course*> coursesVector
dp 变量是包含 CS、PG 或 Elective 的字符串。总的来说,我这样做:
if (dp == "CS")
{
CSCourse *csCourse = new CSCourse(dp, name, semester, minGrade);
coursesVector.push_back(csCourse);
}
它给了我"无法分配抽象类型 CS 课程的对象"。PG和选修课也是如此!
但是,在我的课程定义中,CS课程并不抽象!
CSCourse
类是抽象的。
您在Course
中声明了一个纯虚函数reg
,但没有在CSCourse
中提供实现。
毫无疑问,您的编译器也准确地告诉您了这一点。
你继承自一个抽象类,这很好,但你从来没有实现基类定义的纯虚函数。
此外,您的基类中需要一个虚拟析构函数;
编辑:您还在执行其他可能不必要的操作,例如重新声明大多数派生类函数。 我敢打赌它们的实现与您的基类完全相同?
您尚未在派生类中实现纯虚函数reg
:
virtual void reg(Student &s)=0;
,你的类是抽象的。
相关文章:
- 抽象类错误,请参阅声明" "是抽象的
- C++抽象的字节序是中立的吗?
- 观察者模式:为什么主题应该是抽象的?
- 派生类仍然是抽象的
- 确保课程不是抽象的
- 为什么我的课被认为是抽象的
- 基类为抽象的 ADT 数组
- 继承抽象的基础接口及其实现给出了C2259
- Qt5 有没有办法让QLocalServer监听抽象的Unix套接字
- 在OCAML中,抽象的价格有多大(即多态性功能)
- 这个派生类是如何抽象的
- 为什么 C++11 允许抽象的最终类
- 不能分配抽象类型的对象 - 但类不是抽象的!(C++)
- 有没有办法将抽象的对象投入给孩子
- 如何在编译时间检查课程,是否是抽象的
- 抽象基类具有抽象的嵌套类
- 在C++解释编译器如何能够识别一个类是抽象的还是不抽象的
- 将派生对象添加到(抽象的)基指针数组中
- 函数在C++中永远不能是抽象的吗
- 检测(可能是抽象的)基类的受保护构造函数