2012-10-11 44 views
0

我想在C++中製作一個iNUI傳感器對象列表。製作iNUI傳感器對象列表

我一直在使用這種嘗試:

std::list<INuiSensor*> nuiList;  
... 
nuiList.push_front(&nui); 

編譯後我得到這個錯誤:

error C2664: 'void std::list<_Ty>::push_front(_Ty &&)' : cannot convert parameter 1 from  'INuiSensor **' to 'INuiSensor *&&' 

我怎樣才能解決這個問題呢?

編輯: 類型NUI的:

INuiSensor * nui; 
+0

顯示'nui'的聲明。 nui的類型是什麼? –

回答

0

你推指針的指針nui而列表期待一個指針nui

std::list<INuiSensor*> nuiList;  
... 
nuiList.push_front(nui); // <--- note the lack of & 

事實是, nui是一個指針,並且運算符&取給定對象的地址,所以:

&nui 

被列爲:take the address of the object named nui。因此,如果對象是指向niu的指針,則指針的地址是指向指針的指針。


這是不問,但我認爲是值得的說:可能是一個好主意,以避免存儲對象指針到容器和對象實例改變存儲類型:

std::list <INuiSensor*> VS std::list <INuiSensor> 

當你如果列表是全局的,你將需要一個公共的Close方法來取消分配存儲在列表中的指針所管理的所有內存,如果列表屬於一些對象,你需要在對象析構函數中執行相同的過程。

但是,如果您要存儲對象實例,那麼列表析構函數會在其生命週期結束時將所有存儲的對象解除分配,代碼更清晰且更易於維護。