我继承了一个windows mapi 接口IMAPIAdviseSink.class CMAPIAdviseSinker:public IMAPIAdviseSink
{
public:
ULONG OnNotify( ULONG cNotif,  LPNOTIFICATION lpNotifications );
};ULONG CMAPIAdviseSinker::OnNotify(ULONG cNotif, LPNOTIFICATION lpNotifications )
{
AfxMessageBox(L"Hi,I got it,but havnt handled it yet.");
return 0;
}声明了一个实例:CMAPIAdviseSinker m_sinker;
编译总说我
error C2259: 'CMAPIAdviseSinker' : cannot instantiate abstract class due to following members:
see declaration of 'CMAPIAdviseSinker'到底如何实现此接口呢?和IMAPIAdviseSink : IUnknown有关系么?

解决方案 »

  1.   

    是你写错了吧。
    是不是应该这样啊:
    IMAPIAdviseSinker m_sinker;
    你写成了CMAPIAdviseSinker m_sinker;
      

  2.   

    因为接口都是有纯虚函数组成,所以不可能实例化一个对象(cannot instantiate abstract class ).
    从接口继承,你需要在实现类CMAPIAdviseSinker中重载接口中的纯虚函数,包括IUnknown中的QueryInterface,AddRef,Release.还有IMAPIAdviseSinker中的纯虚函数.
      

  3.   

    你还得实现 CMAPIAdviseSinker 间接继承的接口.典型的, 如 IUnknown