嗨,我运行此代码时遇到编译错误:
std::auto_ptr<MyDisplay> m_display =
std::auto_ptr<MyDisplay>(new MyDisplay(this, m_displayController));
错误是这个:
error C2664: 'MyDisplay::MyDisplay(DemoWindow *,DisplayController*)':
cannot convert parameter 2 from 'std::auto_ptr<_Ty>' to 'DisplayController*'
但是,当我仅传递一个参数时,代码是正确的:
std::auto_ptr<DisplayController> m_displayController =
std::auto_ptr<DisplayController>(US_NEW(DisplayController, this));
在带有2个参数的auto_ptr中创建指针的正确方法是什么?
最佳答案
从错误消息中可以看出,m_displayController
是一个std::auto_ptr<DisplayController>
,而MyDisplay
构造函数需要一个DisplayController*
。
尝试:
std::auto_ptr<MyDisplay> m_display =
std::auto_ptr<MyDisplay>(new MyDisplay(this, m_displayController.get()));
或更妙的是,使构造函数与
std::auto_ptr<DisplayController>
兼容。顺便说一句:这里
std::auto_ptr
的选择可能不是最好的。您可能想read up研究不同类型的智能指针以及它们具有的不同行为。