2011-08-26 38 views
2

好吧,我認爲問題在於我沒有初始化矢量 但我不知道...無論如何,我收到一個錯誤說這是錯誤的:錯誤C2228:'.draw'的左邊必須有class/struct/union

drawable.at(i).draw(); 

與向量在頭文件作爲正在申報:

vector<render*> drawable; 

其渲染指針,因爲我有一大堆的需要類的矢量繪製他們都是純粹的虛擬功能的父母的孩子,這是錯誤的方式嗎?

順便說一句,就擺在我用這一個孩子: 頭:

ShaysWorld * sw; 

CPP:

sw = new ShaysWorld; 
drawable.push_back(sw); 

我能做些什麼來解決 '.draw' 問題的左邊?

回答

6

drawable.at(i)->draw();因爲drawable.at(i)爲使指針

+0

* DOH!* thanks man – Michael

1

Try Out LLVM

_484_0.cc:8:20: error: member reference type 'Renderer *' is a pointer; 
         maybe you meant to use '->'? 
    renderers.at(i).draw(); 
    ~~~~~~~~~~~~~~~^ 
        -> 
1 error generated. 

或如何使用一個偉大的編譯器改善了用戶體驗。

1

我覺得現在的問題是,我還沒有初始化向量

號,您應該能夠立即弄清楚,這不是問題,因爲你得到的來自編譯器的錯誤。程序運行時,未初始化事件會導致問題。你還沒有運行它,因爲它沒有編譯,因爲你得到一個編譯器錯誤消息。

其渲染指針

是一個載體,它是。所以當你從這個矢量得到一個元素時,你有一個指針。你不能在指針上調用成員函數,因爲指針不是對象 - 它指向對象。

這就是錯誤信息所說的:「.draw'的左邊必須有class/struct/union」。這意味着它正是這樣說的:.draw左邊的東西是drawable.at(i),表達式的類型不是類,結構或聯合 - 它是一個指向類的指針。

+0

Nitpicking,但技術上指針可以是一個對象,在這種情況下,它是。因爲指針類型沒有成員,所以說你不能在指針上調用成員函數會更準確。 – AndrzejJ

相關問題