場景:
定義了一個 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);