1

以下代码在 MSVC11 上失败并出现错误

cannot convert parameter 1 from 'std::unique_ptr<DerivedClass>' to 'std::unique_ptr<BaseClass>' 

编码:

class BaseClass
{ };

class DerivedClass : public BaseClass
{ };

void MyFunction(std::unique_ptr<BaseClass> obj)
{ };

int main()
{
      auto ptr = std::unique_ptr<DerivedClass>(new DerivedClass);
      MyFunction(ptr);                 // fails, with error about cannot convert type
      // MyFunction(std::move(ptr));   // This will work
}

正如答案中指出的那样,原因std::move丢失了,但是错误消息使我感到困惑以至于无法发布问题,因此我对其进行了更新,因此任何同样困惑的人都有最好的机会找到答案。

4

1 回答 1

7

您的错误与向上或向下投射无关。您正在尝试复制ptr,这是不允许的。如果您通过std::move(ptr),则转换将是隐式和自动的,就像常规指针一样。

于 2012-11-13T12:41:59.320 回答