Question

im getting these two errors

1>c:\users\owner\documents\visual studio 2010\projects\monopoly\monopoly\xfileentity.cpp(376): error C3490: 'pDrawMesh' cannot be modified because it is being accessed through a const object
IntelliSense: expression must be a modifiable lvalue

i declared pDrawMesh in my class than used it in one function.
here is my class

class CXFileEntity
{
        ......
 LPD3DXMESH pDrawMesh;
        .....
};

here is where i used the variable

void CXFileEntity::DrawMeshContainer(LPD3DXMESHCONTAINER meshContainerBase, LPD3DXFRAME frameBase) const
{
 // Cast to our extended frame type
 D3DXFRAME_EXTENDED *frame = (D3DXFRAME_EXTENDED*)frameBase;  

 // Cast to our extended mesh container
 D3DXMESHCONTAINER_EXTENDED *meshContainer = (D3DXMESHCONTAINER_EXTENDED*)meshContainerBase;

 // Set the world transform But only if it is not a skinned mesh. 
 // The skinned mesh has the transform built in (the vertices are already transformed into world space) so we set identity
 // Added 24/08/10
 if (meshContainer->pSkinInfo)
 {
  D3DXMATRIX mat;
  D3DXMatrixIdentity(&mat);
  m_d3dDevice->SetTransform(D3DTS_WORLD, &mat);
 }
 else
  m_d3dDevice->SetTransform(D3DTS_WORLD, &frame->exCombinedTransformationMatrix);


 // Loop through all the materials in the mesh rendering each subset
 for (unsigned int iMaterial = 0; iMaterial < meshContainer->NumMaterials; iMaterial++)
 {
  // use the material in our extended data rather than the one in meshContainer->pMaterials[iMaterial].MatD3D
  m_d3dDevice->SetMaterial( &meshContainer->exMaterials[iMaterial] );
  m_d3dDevice->SetTexture( 0, meshContainer->exTextures[iMaterial] );

  // Select the mesh to draw, if there is skin then use the skinned mesh else the normal one
  pDrawMesh = (meshContainer->pSkinInfo) ? meshContainer->exSkinMesh: meshContainer->MeshData.pMesh;

  // Finally Call the mesh draw function
  pDrawMesh->DrawSubset(iMaterial);
 }
}
Was it helpful?

Solution

Your member function is const-qualified. You cannot modify any member variables from within a const-qualified member function unless they are declared mutable.

You need to make pDrawMesh mutable, remove the const-qualification from DrawMeshContainer, or find some other way to accomplish whatever it is you are trying to accomplish.

OTHER TIPS

pDrawMesh is really this->pDrawMesh. But since the current method is a const method, this is a const CXFileEntity*. So you can't set the member pDrawMesh.

If DrawMeshContainer really should change the CXFileEntity, remove that const from the method type. If DrawMeshContainer "effectively" keeps the CXFileEntity constant and the pDrawMesh member "doesn't really count" toward your meaning of const for the object, you can change the member to be mutable.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top