“表达式必须是指向完整对象类型的指针”

时间:2014-09-06 03:18:18

标签: c++ visual-c++ matrix vector operator-overloading

我已尝试在此处浏览其他许多主题,但似乎没有一个能解决我的具体问题。

我有一个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必须是指向完整对象类型的指针” 而实际的构建错误是“下标需要数组或指针类型。”

有谁知道这是为什么?如果需要,我可以提供更多信息。

谢谢!

1 个答案:

答案 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[]函数,就可以正常工作。