1

我收到这两个错误

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

我在我的班级中声明了 pDrawMesh,而不是在一个函数中使用它。
这是我的课

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

这是我使用变量的地方

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);
 }
}
4

2 回答 2

4

您的成员函数是 const 限定的。您不能从 const 限定的成员函数中修改任何成员变量,除非它们被声明为可变的。

您需要使pDrawMesh可变,从 中删除 const 限定DrawMeshContainer,或找到其他方法来完成您想要完成的任何事情。

于 2010-11-14T23:56:10.717 回答
0

pDrawMesh是真的this->pDrawMesh。但是由于当前方法是一个const方法,this是一个const CXFileEntity*. 所以你不能设置 member pDrawMesh

如果DrawMeshContainer真的应该更改,请将其从方法类型CXFileEntity中删除。const如果DrawMeshContainer“有效地”保持CXFileEntity常量并且pDrawMesh成员“并没有真正计入”对const对象的含义,则可以将成员更改为mutable

于 2010-11-14T23:57:31.537 回答