数组成员声明和初始化

时间:2012-11-10 17:30:37

标签: c++ gcc

我想让vertices成为Vector的数组。但我不知道如何声明和初始化它。我试过这个,但它抱怨道:

class Mesh {
public:
    Vector  vertices[];
    int     verticesCount;
    Mesh();
    virtual ~Mesh();
};

Mesh::Mesh() {
    verticesCount = 4;

    vertices = new Vector[verticesCount]; // error: expected primary-expression before ']' token
    vertices[0] = new Vector(0, 0, 0);
    vertices[1] = new Vector(1, 0, 0);
    vertices[2] = new Vector(1, 1, 0);
    vertices[3] = new Vector(0, 1, 0);
}

Mesh::~Mesh() {
   delete vertices;
}

修改

尝试纠正,应用您的提示,我达到了这个目标:

Vector*     vertices;
//...
vertices = new Vector[verticesCount];
vertices[0] = Vector(0, 0, 0);
vertices[1] = Vector(1, 0, 0);
vertices[2] = Vector(1, 1, 0);
vertices[3] = Vector(0, 1, 0);
//...
delete[] vertices;

它有效。但是可以吗?

4 个答案:

答案 0 :(得分:0)

C ++中的数组成员必须具有编译时固定大小。

如果要在运行时指定数组的大小,则必须使用指针,或者最好使用std::vector<Vector>

答案 1 :(得分:0)

您将vertices声明为未指定的Vector数组,然后尝试为数组中的每个条目分配内存。

第一个C ++不支持空数组(如果我记得正确的话),并且数组的数据类型不是指向Vector的指针,这意味着你不能使用new表达式。

如果您想使用动态矢量数组,请改用std::vector

std::vector<Vector> vertices;

在构造函数中:

vertices.push_back(Vector(0, 0, 0));
// etc.

答案 2 :(得分:0)

更正:

Vector*  vertices;
[..]
delete[] vertices;

答案 3 :(得分:0)

您正在声明一个未定义大小的数组,编译器也可能通过发出字段包含不完整类型错误来抱怨此错误。

数组不是指针。由于数组包含在类的内存占用空间中,因此必须在编译时知道该大小。

你可以:

  • 如果已知先验
  • ,请使用std::array
  • 使用std::vector来生成可变大小的数组
  • 使用指针Vector *vertices(或Vector **vertices,因为您要实例化单个顶点)