我正在尝试用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;
答案 0 :(得分: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方法来释放由列表中存储的指针管理的所有内存,如果该列表由某个对象拥有,您需要对对象析构函数执行相同的处理。
但是,如果你正在存储对象实例,那么列表析构函数会释放存储在生命周期结束时存储的所有对象,代码更清晰,更易于维护。