【问题标题】:"Expression must be a pointer to a complete object type"“表达式必须是指向完整对象类型的指针”
【发布时间】:2014-09-06 03:18:18
【问题描述】:

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

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

    }

}

在上面三个标记的地方标记了一个错误。

智能感知告诉我“表达式必须是指向完整对象类型的指针” 而实际的构建错误是“下标需要数组或指针类型。”

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

谢谢!

【问题讨论】:

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


【解决方案1】:

线

    M33 m();

声明m 是一个不带参数并返回M33 的函数。这就是most vesting parse 的症结所在。

由于编译器认为m 是一个函数,所以当您在以下行中使用它时会报错:

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

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

    M33 m;

只要M33 定义了operator[] 函数,一切就应该可以工作。

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多