0
struct PLANE {FLOAT X, Y, Z; D3DXVECTOR3 Normal; FLOAT U, V;};

class PlaneStruct
{
public:PLANE PlaneVertices[4];
public:DWORD PlaneIndices;

void CreatePlane(float size)
{
    // create vertices to represent the corners of the cube
    PlaneVertices = 
    {
        {1.0f * size, 0.0f, 1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f, 0.0f},    // side 1
        {-1.0f * size, -0.0f, 1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f, 1.0f},
        {-1.0f * size, -0.0f, -1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 1.0f, 0.0f},
        {1.0f * size, -0.0f, -1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 1.0f, 1.0f},
    };

    // create the index buffer out of DWORDs
    DWORD PlaneIndices[] =
    {
        0, 2, 1,    // side 1
        0, 3, 2
    };
}
};  

これは「平面」構造の私のコードでした。質問が1つだけあります。上部を見ると、PLANEPlaneVertices[4]と表示されています。次に、関数でそれを定義したかったので、特定の値を指定しましたが、次のエラーが発生します。式は変更可能な値である必要があります。助けてください

4

2 に答える 2

2

C ++(2003)の初期化では、のようStructX var = { ... };に変数を定義する場合にのみ使用できます。コードでは、PlaneVerticesが代入式で使用されています。ここでは初期化構文は許可されていません。これは構文エラーです。

後で、メソッドの終了後に破棄されるローカル変数PlaneIndicesを定義します。

于 2012-06-30T09:40:29.493 に答える
0

このように配列に値を割り当てることはできません。PlaneVerticesこれは、初期化に{}表記を使用して配列を定義する場合にのみ使用できます。forループを使用して、配列の個々の要素に各要素を割り当ててみてください

編集:コメントに応じて、PLANE構造体のインスタンスを作成し、必要な値を割り当てます。PlaneVertices次に、これを使用して配列の最初のインデックスに割り当てます。

    PlaneVertices[0] = // instance of PLANE struct you have just created

次に、配列に必要なPLANEの残りの3つのインスタンスについて繰り返し、の1、2、および3のインデックスに追加しますPlaneVertices。完全に説明するために、提供されたデータを使用して最初の1つを実行します

    PLANE plane_object;
    plane_object.X = 1.0*size;
    plane_object.Y = 0.0; 
    plane_object.Z = 1.0*size; 
    plane_object.Normal = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
    plane_object.U = 0.0;
    plane_object.V = 0.0;
    PlaneVertices[0] = plane_object;

次に、追加するプレーンごとに繰り返す必要があります。また、PlaneIndicesの問題に関する他の回答も考慮しないでください。

于 2012-06-30T09:42:14.677 に答える