构造函数中的C++头数组初始化
C++ header array initialization in constructor
我正在使用OpenGL,我正在尝试制作一个绘制矩形的简单基础类。
我有一个课叫Vertex
:
class Vertex
{
public:
Vertex(
glm::vec3 _position,
glm::vec3 _color = glm::vec3(0.0, 0.0, 0.0),
glm::vec3 _normal = glm::vec3(0.0, 1.0, 0.0),
glm::vec3 _texture = glm::vec3(0.0, 0.0, 0.0));
void setNormal(glm::vec3 _normal);
void setTexture(glm::vec3 _texture);
virtual ~Vertex();
protected:
private:
glm::vec3 position;
glm::vec3 color;
glm::vec3 normal;
glm::vec3 texture;
};
这是我的Ground
类:
class Ground
{
private:
double widht;
double length;
double y;
int* indexes;
Vertex* vertices;
public:
Ground(double _width, double_length, double y);
}
以下是我想在地面建设者中做的事情:
this->indexes = {0, 3, 1, 1, 3, 2};
this->vertices = {
Vertex(glm::vec3(0 - width/2, y, 0-length/2)),
Vertex(glm::vec3(0 - width/2, y, 0+length/2)),
Vertex(glm::vec3(0 + width/2, y, 0+length/2)),
Vertex(glm::vec3(0 + width/2, y, 0-length/2))
}
我在编译时得到这个错误:
error: cannot convert ‘<brace-enclosed initializer list>’ to ‘Vertex*’
现在我知道我可以用硬代码初始化所有这些,但我想要一个通用ClassX*数组头定义和构造函数初始化的解决方案。
顶点是一个顶点指针,而不是数组。您可以将成员变量设置为固定大小的数组,也可以在堆上创建Vertex类型的数组。
第一种方式是这样的:
const int NUM_VERTS = 4;
class Ground{
.
.
.
Vertex vertices[NUM_VERTS]
.
.
.
};
或者,如果您想要具有不同顶点数量的几个不同Ground对象,可以使用模板,但这会导致代码膨胀和可执行文件大小过大。不是一个好主意,但是可能的
template<size n>
class Ground{
.
.
.
Vertex vertices[n];
.
.
.
}
否则,当然是
vertices = new Vertex[4];
vertices[0] = Vertex(glm::vec3(0 - width/2, y, 0-length/2));
//etc
.
.
.
将indexes
(索引)和vertices
分别更改为std::vector<int>
和std::vector<Vertex>
。然后你可以写:
Ground::Ground(double _width, double _length, double y)
: indexes{0, 3, 1, 1, 3, 2}
, vertices{
Vertex(glm::vec3(0 - width/2, y, 0-length/2)),
Vertex(glm::vec3(0 - width/2, y, 0+length/2)),
Vertex(glm::vec3(0 + width/2, y, 0+length/2)),
Vertex(glm::vec3(0 + width/2, y, 0-length/2))
}
{
}
相关文章:
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理