嗨,我运行此代码时遇到编译错误:

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研究不同类型的智能指针以及它们具有的不同行为。

09-26 14:41