2014-09-06 111 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[]函數就應該可以工作。

相關問題