MFC虚基类声明问题

puckgod 2012-06-30 03:26:12
想创建一个虚基类,后续所有累类都从这个类来继承,我自己的虚基类创建过程如下:
1。建立一个MFC类,继承CWinThread
2.新建类中添加成员变量,然后编译,成功!
3.增加纯虚函数Process()之后报错error C2259 cannot instantiate abstract class due to following members。 代码如下:


class CBaseThread : public CWinThread
{
DECLARE_DYNCREATE(CBaseThread)
protected:
CBaseThread(); // protected constructor used by dynamic creation

// Attributes
public:

// Operations
public:
static HANDLE m_hAnOtherDead;
HANDLE m_hEventDead;
HANDLE m_hEventKill;
static CRITICAL_SECTION m_csNumLock;

virtual int Process() = 0;
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CBaseThread)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL

// Implementation
protected:
virtual ~CBaseThread();
// Generated message map functions
//{{AFX_MSG(CBaseThread)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG

DECLARE_MESSAGE_MAP()
};
添加蓝色部分不报错,添加红色部分就会报错
error C2259: 'CBaseThread' : cannot instantiate abstract class due to following members:
d:\vc6projects\cfilemake\basethread.h(15) : see declaration of 'CBaseThread'
我用的是VC6.0
跪求大神解决!
...全文
381 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomayi201314 2013-08-21
  • 打赏
  • 举报
回复
太感谢了 终于找到这个问题的答案了
Niteip 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你如果加了virtual int Process() = 0;
那么CBaseThread 就是抽象类,是不能实例化的
[/Quote]


3、4楼正解,我也不必再说一偏
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
自己解决了,MFC自动生成宏的问题,修改
IMPLEMENT_DYNCREATE(CBaseThread, CWinThread)

IMPLEMENT_DYNAMIC(CBaseThread, CWinThread)
就行了,有高手知道这两个宏分别是做什么的吗?
[/Quote]
因为你类声明里是DECLARE_DYNCREATE(CBaseThread)
所以与之遥相呼应的是IMPLEMENT_DYNCREATE



#define DECLARE_DYNCREATE(class_name) \
DECLARE_DYNAMIC(class_name) \
static CObject* PASCAL CreateObject();

多了一个创建对象的成员函数
puckgod 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
动态生成和动态创建。形成型别元组链表。
[/Quote]

求详细点!
puckgod 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
动态生成和动态创建。形成型别元组链表。
[/Quote]


求详细点的指导!
Jarrylogin 2012-07-27
  • 打赏
  • 举报
回复
动态生成和动态创建。形成型别元组链表。
puckgod 2012-07-27
  • 打赏
  • 举报
回复
自己解决了,MFC自动生成宏的问题,修改
IMPLEMENT_DYNCREATE(CBaseThread, CWinThread)

IMPLEMENT_DYNAMIC(CBaseThread, CWinThread)
就行了,有高手知道这两个宏分别是做什么的吗?
Eleven 2012-06-30
  • 打赏
  • 举报
回复
virtual int Process() = 0;
纯虚函数了,你需要派生一个子类,在子类中实现它
sunxc123 2012-06-30
  • 打赏
  • 举报
回复
你如果加了virtual int Process() = 0;
那么CBaseThread 就是抽象类,是不能实例化的
puckgod 2012-06-30
  • 打赏
  • 举报
回复
没人吗?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧