inherit from ID3DXMesh

Started by
1 comment, last by MJP 15 years, 5 months ago
Hy . I would inherit from ID3DXMesh for add a name property for the mesh this is the code
Quote: #pragma once #include "d3dUtility.h" using namespace std; class CMeshBase : public ID3DXMesh { public: CMeshBase(void); public: ~CMeshBase(void); string getName(); void setName(string strName); private: string m_strMeshName; };
all work fine , but this:
Quote: HRESULT hr = D3DXCreateMeshFVF(nIndexes,nVertexes,D3DXMESH_MANAGED,Vertex::FVF,m_Device,&m_mesh);
where m_mesh is a member var = CMeshBase* m_mesh; the error is this:Error 1 error C2664: 'D3DXCreateMeshFVF' : cannot convert parameter 6 from 'CMeshBase **__w64 ' to 'LPD3DXMESH *' ps.How i insert code in the post?i use quote , but isn't correct i suppose
Advertisement
This will implicitly cast from ID3DXMesh* to CMeshBase*, which is illegal. Think The actual instance pointed to by the ID3DXMesh* returned by D3DXCreateMeshFVF is not a CMeshBase.

To achieve what you are trying you could use composition instead.

class CMeshBase{    ID3DXMesh* m_pMesh;    string m_strMeshName; };



You can't inherit from the actual implementation of ID3DXMesh. The actual class "ID3DXMesh" is just an in interface...it contains nothing but declarations of pure virtual functions. The actual methods are implented in some other class...it's probably a C++ class but it technically be any language that supports COM. Either way it doesn't matter, the implementation isn't exposed to you so you can't inherit from it. Inheriting from the interface doesn't gain you anything except for those pure virtual method declarations....methods that you would have to implement yourself. If you want to have your own mesh class and still make use of the ID3DXMesh functionality, you'll have to use inheritance via composition like janta suggested.

Also to post properly formatted code, you need to use the "code" or "source" tags. See the forum FAQ.

This topic is closed to new replies.

Advertisement