我的一段代码出错...在下文中,“顶点”被定义为gVector3的向量,其中gVector3是一个长度为3的浮点数组(x,y,z坐标为一个点)。 []运算符已经为gVector3类重载,因此顶点[i] [k]返回一个浮点数。
我在这行中有错误:(*result)[i+k] = vertices[i][k]
。完整代码以及错误消息如下。任何见解将不胜感激!
float* Polygon::getVertices(){
float* result = new float[vertices.size()*3];
for (int i = 0; i < vertices.size(); i++){
for (int k = 0; k < 3; k++){
(*result)[i+k] = vertices[i][k]; // invalid types for array subscript
}
}
return result;
}
答案 0 :(得分:1)
由于result
被声明为float*
,(*result)
只是float
。它不是一个数组,所以你不能下标它。作业应该是:
result[3*i + k] = vertices[i][k];
或:
*(result + 3*i + k) = vertices[i][k];
请注意,您还需要将i
乘以3,否则您将重复覆盖result
的相同元素。例如。在result[1]
和i = 0, k = 1
时,您会写入i = 1, k = 0
。这称为row major indexing。
答案 1 :(得分:0)
尝试用result[3*i+k]
代替(*result)[i+k]
。 result
是指向float的指针,而不是指向float数组的指针。
答案 2 :(得分:0)
float* result = new float[vertices.size()*3];
正在创建一个float类型的指针。但是在嵌套for循环中,您倾向于将其视为指向数组类型的指针,因此会出错。将指针设为数组类型,或使用*(result + 3*i + k) = vertices[i][k];