2014-09-06 75 views
0

我试过浏览其中的很多其他主题,但没有一个似乎解决了我的具体问题。“表达式必须是指向一个完整的对象类型的指针”

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

    } 

} 

上面三个标记的位置标有错误。

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

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

谢谢!

+3

看起来像[最烦人的解析](http://stackoverflow.com/questions/20529434/member-must-have-class-struct-union)。 – 2014-09-06 03:22:34

+0

'M33 m();' - >'M33 m;'? – P0W 2014-09-06 03:26:34

回答

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[]函数就应该可以工作。

相关问题