-1

我想做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

4 回答 4

0

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

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

于 2012-11-10T17:36:49.253 回答
0

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

首先 C++ 不支持空数组(如果我没记错的话),并且数组的数据类型不是指针,Vector这意味着您不能使用new表达式。

如果要使用动态向量数组,请std::vector改用:

std::vector<Vector> vertices;

在构造函数中:

vertices.push_back(Vector(0, 0, 0));
// etc.
于 2012-11-10T17:37:31.903 回答
0

更正:

Vector*  vertices;
[..]
delete[] vertices;
于 2012-11-10T17:37:55.617 回答
0

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

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

您可以:

  • std::array如果大小是先验已知的,则使用
  • 使用 astd::vector具有可变大小的数组
  • 使用指针Vector *vertices(或者Vector **vertices因为您正在实例化单个顶点)
于 2012-11-10T17:38:28.547 回答