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 classclass 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
.
精彩评论