我运行此代码时出现编译错误:
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中创建指针的正确方法是什么?
答案 0 :(得分:3)
在错误消息中,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了解不同类型的智能指针,以及它们具有的不同行为。
答案 1 :(得分:0)
我想澄清你创建自动指针的想法,我希望这会有所帮助 您的目标是创建一个包含DisplayController *的auto_ptr。你可以写
m_displayController = std::auto_ptr<DisplayController>( new DisplayController(x, y) );
或者有一个返回指针的函数,如下所示:
m_displayController = std::auto_ptr<DisplayController>( US_NEW(x,y) );
您可以查看一个简单示例here.