2014-02-11 70 views
0

我得到一段代碼的錯誤......在下文中,「頂點」被定義爲gVector3的向量,其中gVector3是長度爲3的浮點數組(x ,點的y,z座標)。 gVector3類的[]運算符已被重載,所以vertices [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; 
} 

回答

1

由於result被宣告爲float*(*result)只是一個float。這不是一個數組,所以你不能下標。分配應該是:

result[3*i + k] = vertices[i][k]; 

或:

*(result + 3*i + k) = vertices[i][k]; 

請注意,您還需要通過3乘i,否則你要重複覆蓋的result相同的元素。例如。當i = 0, k = 1i = 1, k = 0時,您將寫入result[1]。這叫做row major indexing

0

儘量用result[3*i+k]代替(*result)[i+k]result是一個指向float的指針,而不是指向float數組的指針。

+0

我將它作爲(*結果)[i + k] ... – AmazingVal

+0

確切地說,將其改爲result [i + k]。 – bb94

0

float* result = new float[vertices.size()*3];正在創建浮點類型的指針。但是在嵌套的for循環中,您傾向於將其視爲指向數組類型的指針,因此是錯誤。或者使指針成爲數組類型,或者使用*(result + 3*i + k) = vertices[i][k];

相關問題