在矢量大括号初始化中将 C 数组传递给结构初始值设定项
Passing a C array to a struct initializer in a vector brace initialization
首先,我看到了这个问题。
我很好奇为什么以下内容不起作用:
float vcolor[4]{color.getX(),color.getY(),color.getZ(),1.0f};
float v1[3]{from.getX(),from.getY(),from.getZ()};
float v2[3]{to.getX(),to.getY(),to.getZ()};
std::vector<Vertex> v={{v1,vcolor},{v2,vcolor}};
没有用于初始化的匹配构造函数 'std::vector'
但是直接传递元素可以正常工作(如另一个问题中所述(:
std::vector<Vertex> v={
{{from.getX(),from.getY(),from.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}},
{{to.getX(),to.getY(),to.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}}};
前者不应该也有可能吗?
这里有一个简单的解释。您可以使用聚合初始化语法初始化数组,如float arr[4] = { 1.f, 2.f, 3.f, 4.f }
。这就是Vertex v = { {1.f, 2.f, 3.f}, {1.f, 2.f, 3.f, 4.f} }
工作的原因。你不能做的是从另一个数组复制初始化一个数组。所以
float arr[4] = { 1.f, 2.f, 3.f, 4.f };
float brr[4] = arr;
不行。所以,最终,在你的问题中,第一种形式不起作用。
让我们更详细地看看你在这里尝试做什么:
std::vector<Vertex> v={
{{from.getX(),from.getY(),from.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}},
{{to.getX(),to.getY(),to.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}}};
您尝试使用两个元素初始化 Vector,这两个元素的初始化方式为
{{from.getX(),from.getY(),from.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}}
和
{{to.getX(),to.getY(),to.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}}
这些又是初始值设定项列表,C++尝试将其转换为顶点。Sinze 它们包含两个元素,它们本身是包含 3(4( 浮点数的初始值设定项列表。(至少我假设你的getX/Y/Z()
返回浮点数(,一切都很好,它们用于初始化每个顶点内的数组。这在某种程度上等同于调用
Vertex{{from.getX(),from.getY(),from.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}};
float position[3]{from.getX(),from.getY(),from.getZ()};
float color[4]{color.getX(),color.getY(),color.getZ(),1.0f};
现在让我们看看你的第二个案例:
std::vector<Vertex> v={{v1,vcolor},{v2,vcolor}};
同样,每个 containig 初始值设定项列表都"映射"到一个顶点,给出如下调用:
Vertex{v1,vcolor}
但是 v1 和 vcolor 不是初始值设定项列表,它们只是一个指向浮点数的指针(float*
(
就像你不能做的那样
float v3[3]{v1};
或更明显
float* f = new float;
float v[3]{f};
无法从float*
初始化数组
您可以尝试使用 std::arrays 并使用其基于迭代器的构造。或者你可以尝试为顶点编写适当的构造函数。或者,您可以将初始值设定项列表存储为初始值设定项列表,直到实际形成顶点。无论哪种方式,分多个步骤构建顶点都需要做更多的工作。
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组