«Выражение должно быть указателем на полный тип объекта»

0

Я пробовал просматривать многие другие темы там, но никто из них, похоже, не исправил мою конкретную проблему.

Я имею матричный класс 3X3 и имею следующий код, позволяющий пользователю получить доступ к строкам матрицы:

V3& M33::operator[](int i) 
{

  return rows[i]; // rows is a Vector3 array

}

Но в моем классе векторов, когда я пытаюсь это сделать:

void rotateAboutArbitraryAxis(int axis, float degrees)
{
    if(axis == 0)
    {
        M33 m();
        V3 row0(1.0f, 0.0f, 0.0f);
        V3 row1(0.0f, cos(degrees), -sin(degrees));
        V3 row2(0.0f, sin(degrees), cos(degrees));


        m[0] = row0; //error
        m[1] = row1; //error
        m[2] = row2; //error

    }

}

В трех отмеченных местах выше отмечена ошибка.

Intellisense говорит мне: "Выражение должно быть указателем на полный тип объекта", в то время как фактическая ошибка сборки - "для индекса требуется массив или тип указателя".

Кто-нибудь знает, почему это? При необходимости я могу предоставить дополнительную информацию.

Благодарю!

Теги:
visual-c++
vector
matrix
operator-overloading

1 ответ

0
Лучший ответ

Линия

    M33 m();

объявляет m функцией, которая не принимает аргументов и возвращает M33. Это суть самого важного синтаксического анализа.

Поскольку компилятор считает, что функция m является функцией, она жалуется, когда вы используете ее в следующих строках:

    m[0] = row0; //error
    m[1] = row1; //error
    m[2] = row2; //error

Как прокомментировал POW, если вы измените первую строку на:

    M33 m;

вещи должны работать до тех пор, пока M33 определяет функцию operator[].

Ещё вопросы

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