error C2259:“CTask”:不能实例化抽象类
场景:
定义了一个 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);

浙公网安备 33010602011771号