- ベストアンサー
抽象クラスのエラーが出ます
http://www5f.biglobe.ne.jp/~kenmo/program/skinmesh/skinmesh.html このサイトのコードを動かそうとすると、 >error C2259: 'CAllocateHierarchy' : 抽象クラスをインスタンス化できません。 というエラーが出てしまいます。 抽象クラスというのを初めて聞いたのですが、 どうすればこのエラーを消せるのでしょうか?
- みんなの回答 (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; }
その他の回答 (1)
- buriburi3
- ベストアンサー率44% (353/792)
オーバーライドを前提に作られている純粋仮想メソッドが実装されていないと言うことです。 ID3DXAllocateHierarchyにvirtual宣言されている未実装のメソッドがあって、そのメソッドの実装をCAllocateHierarchy内で行う必要があるのだと思います。 http://www.geocities.jp/ky_webid/cpp/language/010.html
お礼
ご回答ありがとうございます。 どうやらクラスに対する理解が相当なってない事を自覚しました。 最低限扱っているだけだったようで; 参考サイトの紹介等、ありがとうございましたっ
お礼
ご回答ありがとうございました。 IUnknownインターフェース、 QueryInterface()、 GUID、REFID、 ちょっと今の自分には早すぎた様で、1個1個を調べてるものの 全体像が全く掴めない状況に; 理解できるまでじりじり学習してみようと思います; ありがとうございました