プロが教える店舗&オフィスのセキュリティ対策術

http://www5f.biglobe.ne.jp/~kenmo/program/skinme …
このサイトのコードを動かそうとすると、
>error C2259: 'CAllocateHierarchy' : 抽象クラスをインスタンス化できません。
というエラーが出てしまいます。
抽象クラスというのを初めて聞いたのですが、
どうすればこのエラーを消せるのでしょうか?

A 回答 (2件)

 こんにちは。



 継承元のIUnknownインターフェースが実装されていないのでは。
 http://msdn.microsoft.com/ja-jp/library/cc372741 …

 QueryInterface()ですが、ID3DXAllocateHierarchyに対応するGUIDは無い様ですので(恐らくコンポーネントとして公開する場合に自身でGUIDを登録する)、普通にthisポインタを返せば良いと思います。

STDMETHODIMP QueryInterface(REFIID riid, LPVOID* ppReturn)
{
//REFIID(GUID)があれば
//if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, /*ID3DXAllocateHierarchyに対応するインターフェースID*/)
//{
//*ppReturn = this;
//this->AddRef();
//return S_OK;
//}
//*ppReturn = NULL;
//return E_NOINTERFACE;

//REFIID(GUID)が無ければ
*ppReturn = this;
this->AddRef();
return S_OK;
}

STDMETHODIMP_(DWORD) AddRef()
{
return ++m_nRefCount;
}

STDMETHODIMP_(DWORD) Release()
{
if(--m_nRefCount)
return m_nRefCount;

delete this;
return 0;
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

IUnknownインターフェース、
QueryInterface()、
GUID、REFID、
ちょっと今の自分には早すぎた様で、1個1個を調べてるものの
全体像が全く掴めない状況に;

理解できるまでじりじり学習してみようと思います;
ありがとうございました

お礼日時:2009/04/14 12:23

オーバーライドを前提に作られている純粋仮想メソッドが実装されていないと言うことです。


ID3DXAllocateHierarchyにvirtual宣言されている未実装のメソッドがあって、そのメソッドの実装をCAllocateHierarchy内で行う必要があるのだと思います。

http://www.geocities.jp/ky_webid/cpp/language/01 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
どうやらクラスに対する理解が相当なってない事を自覚しました。
最低限扱っているだけだったようで;

参考サイトの紹介等、ありがとうございましたっ

お礼日時:2009/04/14 12:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!