ошибка типа после разыменования арифметики указателя?

0

Мне любопытно, почему следующий код не работает. В частности, компилятор, похоже, просматривает * (результат + 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;
    }
  • 0
    Если это указатель на массив с float , разыменование даст массив с float . Таким образом, это указатель на одну вещь, и вы притворяетесь, что существует прямой набор вещей, когда вы делаете result + i .
  • 0
    Если вы введете int * ptr = new int [3], ptr должен хранить адрес первого элемента массива, верно?
Показать ещё 4 комментария
Теги:

1 ответ

2

Если gVector3 является классом, то он, вероятно, перегружает operator[], и это то, что вы должны использовать. В противном случае вы выполняете арифметику указателя на самом объекте. Попробуй это:

(*result)[i] = data[i][index];
  • 0
    operator[] вызывается по указателю здесь.
  • 0
    К сожалению! Я исправлю это ....
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню