数组下标错误的类型无效

时间:2014-02-11 05:03:41

标签: c++

我的一段代码出错...在下文中,“顶点”被定义为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;
 }

3 个答案:

答案 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];