2017-12-21 7 views
-5

メッシュを設定しようとすると、エラーE0137が発生する。 getMeshesはうまく機能します。 いつも同じようにしようとしていますC++ update structure offset

RpMesh* a = header->GetMeshes(); 
a = newMeshes; 

これはあまりにも機能しません。

struct RpMeshHeader 
{ 
    unsigned int flags; 
    unsigned short numMeshes; 
    unsigned short serialNum; 
    unsigned int totalIndicesInMesh; 
    unsigned int firstMeshOffset; 
    RpMesh *getMeshes(void) { return (RpMesh*)(this + 1); } 
    void setMeshes(RpMesh* newMesh) 
    { 
     (RpMesh*)(this + 1)= newMesh; 
    } 
    bool isValidMeshId(int meshId) 
    { 
     return (meshId != NULL && numMeshes >= meshId); 
    } 
} 

ファイル全体 https://github.com/CrosRoad95/mtasa-blue/blob/f740b0d7410f33ff323cad25bf897725ad44d7d3/Client/sdk/game/RenderWare.h

+4

エラーE0137とは何ですか?どのラインで発生するのですか? *正確なエラーメッセージをコピーして、それを引き起こす正確なコードを表示してください – UnholySheep

+2

また、(RpMesh *)(this + 1)= newMesh;を介して達成しようとしているものは?*これは、 – UnholySheep

+0

ライン(RpMesh *)(this + 1)= newMesh; C++式は変更可能なl値でなければなりません – PolskiSebek12

答えて

0

ここでエラーは非常に明確である:

void setMeshes(RpMesh* newMesh) 
{ 
    (RpMesh*)(this + 1)= newMesh; 
} 

error: lvalue required as left operand of assignment

次はあなたがそれに割り当てることができませんlvalueとそうではありません。あなたがリンクされ

(RpMesh*)(this + 1) 

githubのは、構文の面で結構です、次の

void setMeshes(RpMesh* newMeshes) 
{ 
    RpMesh* meshes = (RpMesh*)(this + 1); 
    meshes = newMeshes; 
} 

としてsetMeshesを示しています。最初に、アドレスmeshesを作成し、アドレスを(this+1)に設定します(が配列の場合、this+1は配列の次の要素を指しますが)。

あなたが(詳細はhereを参照してください私の知る限り、この場合にreinterpret_castがデフォルトになる)CスタイルのキャストでRpMeshからRpMeashHeaderのこの配列では、この仮定の次の要素をキャスト

しかし、このメモリは、すべてとなっています割り当てられた?これは安全ではないようです。