开发者

c++ IntelliSense: expression must be a modifiable lvalue

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
 i开发者_运维问答f (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);
 }
}


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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜