2012-11-13 40 views
1

上MSVC11下面的代碼失敗,出現錯誤MSVC不能上溯造型的unique_ptr

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

我以爲這個問題並不是那麼可怕,因爲MSVC打印的混淆錯誤信息。正如@DeadMG所評論的,我並不是唯一一個被此事發現的人。現在,對於那些搜索編譯器錯誤的人來說,這個問答將會出現... – Zero

回答

7

你的錯誤與上或下鑄造無關。您正試圖複製ptr,這是不允許的。如果您通過std::move(ptr),則投射將是隱式和自動的,就像常規指針一樣。

+0

gah - 這就是爲什麼我不應該在晚上編碼。雖然錯誤是我曾經發布過的,但這不是''移動'unique_ptr'的常見錯誤。我投票結束是不是真正的問題,因爲它是基於一個錯誤,標題和內容不會幫助任何人後來搜索,但感謝您的迴應,可能爲我節省了一小時的時間。 – Zero

+0

我不會。這就像我第五次回答這個問題。顯然需要更多的搜索機構。 – Puppy

+0

足夠公平,更新問題以嘗試捕捉處於類似情況的人。 – Zero