按引用传递的变量在函数范围内发生了变化,但在主范围内没有发生变化
Variable passed-by-reference is changed in function scope but not in main scope
我正在尝试将给定的向量网格更改为高度图,我通过引用函数传递顶点向量来实现,该函数应计算每个顶点的高度并更改它。但是,在主范围内打印新顶点的高度时,所有顶点的高度都是 0,而如果我在计算它们后立即打印顶点的高度,我会得到正确的结果。
int main(){
std::vector<glm::vec3> vertinfo = generate_grid(4, 4, 2.0f, 2.0f); //generates the grid
generate_randomheightmap(vertinfo); //SHOULD modify the height of the vertices
//printing the y value of any of the vertices here will result in 0 (the unchanged value)
...
}
void generate_randomheightmap(std::vector<glm::vec3>& base, uint32_t layers){
for (glm::vec3 vertex : base){
vertex.y += vertex.x * vertex.z;
//printing the y value of the vertex here will result in the correct calculated value
}
}
这是否不起作用,因为 vec3 对象本身被复制,而向量不是?
如果我必须将 vec3 的指针更改为 vec3 指针,那将是非常烦人的
问题不在于函数的按引用传递,而在于 for
循环。它应该使用对向量元素的引用:
for (glm::vec3& vertex : base)
我正在尝试将给定的向量网格更改为高度图,我通过引用函数传递顶点向量来实现,该函数应计算每个顶点的高度并更改它。但是,在主范围内打印新顶点的高度时,所有顶点的高度都是 0,而如果我在计算它们后立即打印顶点的高度,我会得到正确的结果。
int main(){
std::vector<glm::vec3> vertinfo = generate_grid(4, 4, 2.0f, 2.0f); //generates the grid
generate_randomheightmap(vertinfo); //SHOULD modify the height of the vertices
//printing the y value of any of the vertices here will result in 0 (the unchanged value)
...
}
void generate_randomheightmap(std::vector<glm::vec3>& base, uint32_t layers){
for (glm::vec3 vertex : base){
vertex.y += vertex.x * vertex.z;
//printing the y value of the vertex here will result in the correct calculated value
}
}
这是否不起作用,因为 vec3 对象本身被复制,而向量不是? 如果我必须将 vec3 的指针更改为 vec3 指针,那将是非常烦人的
问题不在于函数的按引用传递,而在于 for
循环。它应该使用对向量元素的引用:
for (glm::vec3& vertex : base)