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

我该如何解决这个问题?

编辑:nui类型:

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 回答