Я пробовал просматривать многие другие темы там, но никто из них, похоже, не исправил мою конкретную проблему.
Я имею матричный класс 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 говорит мне: "Выражение должно быть указателем на полный тип объекта", в то время как фактическая ошибка сборки - "для индекса требуется массив или тип указателя".
Кто-нибудь знает, почему это? При необходимости я могу предоставить дополнительную информацию.
Благодарю!
Линия
M33 m();
объявляет m
функцией, которая не принимает аргументов и возвращает M33
. Это суть самого важного синтаксического анализа.
Поскольку компилятор считает, что функция m
является функцией, она жалуется, когда вы используете ее в следующих строках:
m[0] = row0; //error
m[1] = row1; //error
m[2] = row2; //error
Как прокомментировал POW, если вы измените первую строку на:
M33 m;
вещи должны работать до тех пор, пока M33
определяет функцию operator[]
.
M33 m();
->M33 m;
?