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