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

这是我的“平面”结构代码,我只有一个问题,如果你看顶部,上面写着 PLANE PlaneVertices[4]; 然后在一个函数中我想定义它,所以给它特定的值,但我得到以下错误:表达式必须是一个可修改的值。请帮忙

4

2 回答 2

2

在 C++ (2003) 初始化中,likeStructX var = { ... };只能在定义变量时使用。在您的代码中,PlaneVertices 用于赋值表达式。那里不允许初始化语法。这是一个语法错误。

稍后,您定义了一个局部变量 PlaneIndices,该变量将在退出该方法后被丢弃。

于 2012-06-30T09:40:29.493 回答
0

你不能像这样为你的数组赋值PlaneVertices,你只能在使用 {} 符号定义它来初始化它时使用它。尝试使用 for 循环将每个元素分配给数组的每个单独元素

编辑:响应您的评论,创建 PLANE 结构的实例并为其分配您希望它具有的值。然后将其分配给PlaneVertices数组中的第一个索引,使用

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

然后对数组中所需的剩余 3 个 PLANE 实例重复此操作,并将PlaneVertices. 为了充分说明,我将使用您提供的数据为您做第一个

    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;

然后,您需要为要添加的每个 PLANE 重复此操作。也不要考虑有关您的 PlaneIndices 问题的其他答案。

于 2012-06-30T09:42:14.677 回答