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

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM