场景:
定义了一个 CTask 抽象类 class CTask { protected: string m_strTaskName; /** 任务的名称 */ void* m_ptrData; /** 要执行的任务的具体数据 */ public: CTask() {} CTask(string taskName) { m_strTaskName = taskName; m_ptrData = NULL; } virtual int Run() = 0; void SetData(void* data); /** 设置任务数据 */ public: virtual ~CTask() {} }; vector<CTask> vTasks; CTask task1; //创建对象报错 vTasks.push_back(task1);
原因:
抽象类不能实例化,需要在派生类中实现基类所有定义的纯虚函数,只要有一个纯虚函数没有定义,那么派生类还是抽象类。仍然不能实例化。
解决方法:
//用指针 vector<CTask*> vTasks; CTask *task1; vTasks.push_back(task1); //派生类实现基类纯虚函数 class CMyTask : public CTask { public: CMyTask() {} inline int Run() { printf("%s/n", (char*)this->m_ptrData); //Sleep(10*1000); return 0; } }; CMyTask taskObj; //派生类可以创建对象 vTasks.push_back(&taskObj);