"Expression must be a pointer to a complete object type"

"Expression must be a pointer to a complete object type"

本文关键字:complete object type to pointer be Expression must      更新时间:2023-10-16

我已经尝试浏览了许多其他主题,但似乎没有一个能解决我的特定问题。

我有一个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

正如P0W所评论的,如果您将第一行更改为:

    M33 m;

只要M33定义了operator[]函数,一切都应该正常。

相关文章: