我已尝试在此处浏览其他许多主题,但似乎没有一个能解决我的具体问题。
我有一个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告诉我“Expression必须是指向完整对象类型的指针” 而实际的构建错误是“下标需要数组或指针类型。”
有谁知道这是为什么?如果需要,我可以提供更多信息。
谢谢!
答案 0 :(得分:0)
该行
M33 m();
声明m
是一个不带参数的函数,并返回M33
。这是most vesting parse。
由于编译器认为m
是一个函数,因此当您在以下行中使用它时会抱怨:
m[0] = row0; //error
m[1] = row1; //error
m[2] = row2; //error
正如POW所评论的,如果你把第一行改为:
M33 m;
只要M33
定义了operator[]
函数,就可以正常工作。