語法,多重繼承的問題 |
尚未結案
|
Wowo
一般會員 發表:2 回覆:0 積分:0 註冊:2007-12-28 發送簡訊給我 |
// H
[code cpp] #ifndef _TestH #define _TestH #include "windows.h" interface IBase { STDMETHODCALLTYPE IBase(){}; virtual ULONG STDMETHODCALLTYPE AddRef(void)=0; virtual ULONG STDMETHODCALLTYPE Release(void)=0; }; interface IClassA:public IBase { virtual void FunA(void)=0; }; class TBase:public IBase { public: TBase(void); virtual ~TBase(); virtual ULONG STDMETHODCALLTYPE AddRef(void); virtual ULONG STDMETHODCALLTYPE Release(void); }; class TClassA:public TBase,IClassA { public: TClassA(void); virtual ~TClassA(); virtual void FunA(void); }; #endif ///////////////////////////////////////////////////////////////////////// #include "test.h" TBase::TBase(void) :IBase() { } TBase::~TBase() { } ULONG STDMETHODCALLTYPE TBase::AddRef(void) { return 0; } ULONG STDMETHODCALLTYPE TBase::Release(void) { return 0; } TClassA::TClassA(void) { } TClassA::~TClassA() { } void TClassA::FunA(void) { } int main(int argc, _TCHAR* argv[]) { TClassA D; return 0; } [/code] d:\Test\Test.cpp(32) : error C2259: 'TClassA' : cannot instantiate abstract class due to following members: 'ULONG IBase::AddRef(void)' : pure virtual function was not defined d:\Test\Test.h(7) : see declaration of 'IBase::AddRef' 'ULONG IBase::Release(void)' : pure virtual function was not defined d:\Test\Test.h(8) : see declaration of 'IBase::Release' 請問要如何處理 |
pctalent
初階會員 發表:0 回覆:6 積分:26 註冊:2005-09-04 發送簡訊給我 |
錯誤訊息之中有說了
TClassA因為沒有實做繼承至IBase的 virtual ULONG STDMETHODCALLTYPE AddRef(void)=0; virtual ULONG STDMETHODCALLTYPE Release(void)=0; 所以是個abstract class 不能拿來建立物件實體 ===================引 用 Wowo 文 章=================== // H [code cpp] #ifndef _TestH #define _TestH #include "windows.h" interface IBase { STDMETHODCALLTYPE IBase(){}; virtual ULONG STDMETHODCALLTYPE AddRef(void)=0; virtual ULONG STDMETHODCALLTYPE Release(void)=0; }; interface IClassA:public IBase { virtual void FunA(void)=0; }; class TBase:public IBase { public: TBase(void); virtual ~TBase(); virtual ULONG STDMETHODCALLTYPE AddRef(void); virtual ULONG STDMETHODCALLTYPE Release(void); }; class TClassA:public TBase,IClassA { public: TClassA(void); virtual ~TClassA(); virtual void FunA(void); }; #endif ///////////////////////////////////////////////////////////////////////// #include "test.h" TBase::TBase(void) :IBase() { } TBase::~TBase() { } ULONG STDMETHODCALLTYPE TBase::AddRef(void) { return 0; } ULONG STDMETHODCALLTYPE TBase::Release(void) { return 0; } TClassA::TClassA(void) { } TClassA::~TClassA() { } void TClassA::FunA(void) { } int main(int argc, _TCHAR* argv[]) { TClassA D; return 0; } [/code] d:\Test\Test.cpp(32) : error C2259: 'TClassA' : cannot instantiate abstract class due to following members: 'ULONG IBase::AddRef(void)' : pure virtual function was not defined d:\Test\Test.h(7) : see declaration of 'IBase::AddRef' 'ULONG IBase::Release(void)' : pure virtual function was not defined d:\Test\Test.h(8) : see declaration of 'IBase::Release' 請問要如何處理 |
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
懶懶泥
一般會員 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
class TClassA:public TBase,IClassA
因為 TClassA 繼承了 TBase,IClassA 兩個介面, 雖然 TBase有實作了從 IBase 繼承的pure virtual, 但 interface IClassA:public IBase 卻沒有, 所以 class TClassA:public TBase,IClassA TClassA 從 IClassA 那邊繼承的 IBase pure virtual function 未實做,故 TClassA 仍是抽象類別。 解決方式已 virtual 繼承 TBase,IClassA 確保只有一份IBase pure virtual function ,或是 interface IClassA 不要繼承 IBase 就可以了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |