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
跪求大神解决!
...全文
320 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
没人吗?
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2012-06-30 03:26
社区公告
暂无公告