0

c++ で iNUIsensor オブジェクトのリストを作成しようとしています。

私はこれを使ってみました:

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 *&&'

この問題を解決するにはどうすればよいですか?

編集:ヌイの種類:

INuiSensor * nui;
4

1 に答える 1

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 メソッドが必要になります。オブジェクトによって所有されている場合は、同じプロセスをオブジェクト デストラクタに実行する必要があります。

ただし、オブジェクト インスタンスを格納している場合、リスト デストラクタは、有効期間が終了したときに格納されているすべてのオブジェクトの割り当てを解除します。コードはよりクリーンで維持しやすくなります。

于 2012-10-11T10:11:54.850 に答える