Ram*_*lol 0 c++ winapi class visual-c++
我有这个课程将帮助我动画网格.
class CAllocateHierarchy: public ID3DXAllocateHierarchy
{
public:
STDMETHOD(CreateFrame)(THIS_ LPCTSTR Name, LPD3DXFRAME *ppNewFrame);
STDMETHOD(CreateMeshContainer)(THIS_ LPCTSTR Name, LPD3DXMESHDATA pMeshData,
LPD3DXMATERIAL pMaterials, LPD3DXEFFECTINSTANCE pEffectInstances, DWORD NumMaterials,
DWORD *pAdjacency, LPD3DXSKININFO pSkinInfo,
LPD3DXMESHCONTAINER *ppNewMeshContainer);
STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree);
STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerBase);
CAllocateHierarchy(CMyD3DApplication *pApp) :m_pApp(pApp) {}
public:
CMyD3DApplication* m_pApp;
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试像CAllocateHierarchy allloc(this);我一样安装一个类时会出错. 16 IntelliSense: object of abstract class type "CAllocateHierarchy" is not allowed: c:\users\owner\documents\visual studio 2010\projects\monopoly\monopoly\monopoly.cpp 186
该错误消息表明您没有覆盖接口ID3DXAllocateHierarchy中的所有抽象方法.
通过参数查看,我看到你忘记了CreateMeshContainer()方法的几个参数的"const".因此,C++编译器认为这是一个不同的方法,并抱怨原始的CreateMeshContainer()仍然是抽象的.
来自http://msdn.microsoft.com/en-us/library/bb205621(v=VS.85).aspx
HRESULT CreateMeshContainer(
[in] LPCSTR Name,
[in] const D3DXMESHDATA *pMeshData,
[in] const D3DXMATERIAL *pMaterials,
[in] const D3DXEFFECTINSTANCE *pEffectInstances,
[in] DWORD NumMaterials,
[in] const DWORD *pAdjacency,
[in] LPD3DXSKININFO pSkinInfo,
[out, retval] LPD3DXMESHCONTAINER *ppNewMeshContainer
);
Run Code Online (Sandbox Code Playgroud)
因此解决方案是:将"const"添加到多个参数中(但请参阅下面的更新).
更新:你的论点中也缺少一些'*'.显然你已经声明CreateMeshContainer按值获取参数,而它应该是const指针.从msdn链接复制粘贴声明并删除[in]标记可能是获得正确声明的最快方法.
建议:使用不同的编译器可能有助于生成更具洞察力的错误消息,因为可能会将警告级别设置得尽可能高.一些编译器列出了仍然是抽象的方法.某些编译器可能会警告您的CreateMeshContainer()没有覆盖接口中的虚拟CreateMeshContainer().每一个错误的建议都会有所帮助.