我想让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;
它有效。但是可以吗?
答案 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
,因为您要实例化单个顶点)