Мне любопытно, почему следующий код не работает. В частности, компилятор, похоже, просматривает * (результат + i) как тип gVector3, а не float. Но результат - это указатель на массив с плавающей точкой? Так что бы разыменовать указатель возвращать float? Вы можете предположить, что определены gVector3 и gMatrix3.
/* returns the column vector at index i */
gVector3 gMatrix3::getColumn(unsigned int index) const{
gVector3* result = new gVector3();
for (int i = 0; i < 3; i++){
*(result + i) = data[i][index];
}
return *result;
}
Если gVector3 является классом, то он, вероятно, перегружает operator[]
, и это то, что вы должны использовать. В противном случае вы выполняете арифметику указателя на самом объекте. Попробуй это:
(*result)[i] = data[i][index];
operator[]
вызывается по указателю здесь.
float
, разыменование даст массив сfloat
. Таким образом, это указатель на одну вещь, и вы притворяетесь, что существует прямой набор вещей, когда вы делаетеresult + i
.