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 に答える