2010-11-14 22 views
1

im obtenir ces deux erreursC++ IntelliSense: expression doit être une lvalue modifiable

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 

je déclarai pDrawMesh dans ma classe que celle utilisée dans une fonction.
ici est ma classe

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

ici est où je la 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); 
} 
} 

Répondre

4

Votre fonction membre est const qualifié. Vous ne pouvez pas modifier les variables membres à l'intérieur d'une fonction membre const-qualifiée sauf si elles sont déclarées mutables.

Vous devez faire pDrawMesh mutable, supprimer la const-qualification de DrawMeshContainer, ou trouver un autre moyen d'accomplir ce que vous essayez d'accomplir.

+0

Battu de 10 secondes ... Cause Mot de passe oublié. – Dialecticus

0

pDrawMesh est vraiment this->pDrawMesh. Mais puisque la méthode actuelle est une méthode const, this est un const CXFileEntity*. Vous ne pouvez donc pas définir le membre pDrawMesh. Si DrawMeshContainer doit vraiment changer le CXFileEntity, supprimez ce const du type de méthode. Si DrawMeshContainer "efficacement" conserve la constante CXFileEntity et le membre pDrawMesh "ne compte pas vraiment" vers votre sens de const pour l'objet, vous pouvez le remplacer par mutable.