• ベストアンサー

抽象クラスのエラーが出ます

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 こんにちは。  継承元のIUnknownインターフェースが実装されていないのでは。  http://msdn.microsoft.com/ja-jp/library/cc372741.aspx  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; }

zaxs5968
質問者

お礼

ご回答ありがとうございました。 IUnknownインターフェース、 QueryInterface()、 GUID、REFID、 ちょっと今の自分には早すぎた様で、1個1個を調べてるものの 全体像が全く掴めない状況に; 理解できるまでじりじり学習してみようと思います; ありがとうございました

その他の回答 (1)

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.1

オーバーライドを前提に作られている純粋仮想メソッドが実装されていないと言うことです。 ID3DXAllocateHierarchyにvirtual宣言されている未実装のメソッドがあって、そのメソッドの実装をCAllocateHierarchy内で行う必要があるのだと思います。 http://www.geocities.jp/ky_webid/cpp/language/010.html

zaxs5968
質問者

お礼

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

関連するQ&A