以下代码在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
缺失了,但是错误信息让我很困惑地发布了问题,所以我更新了它,所以任何同样困惑的人都有最好的发现机会答案。
答案 0 :(得分:7)
您的错误与向上或向下投射无关。您正在尝试复制ptr
,这是不允许的。如果你传递std::move(ptr)
,那么强制转换将是隐式和自动的,就像常规指针一样。