在此代碼:爲什麼我需要轉換?
template<class T>
struct Side
{
};
template<class T>
struct LeftSide : public Side<T>
{
};
template<class T>
struct RightSide : public Side<T>
{
};
Side<int>* f(int left, int right)
{
return left < right ? new LeftSide<int> : new RightSide<int>;//<---Here I'm returning either left or right side
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
我得到一個錯誤:
_Error 1錯誤C2446: ':':沒有從轉換 'RightSide *' 到 '萊夫特賽德*' _
我我認爲(錯誤,因爲我看到),我可以分配指針從派生到基地沒有任何問題。那麼問題在哪裏?
(1)你可以不寫用戶自定義轉換betweem指針類型。 (2)您只需修改一個操作數的類型即可使其工作。 (3)由於存在隱式轉換,所以即使'static_cast'也是過量的,static_cast'可以防止編譯器警告合法的類型安全問題。 – 2010-09-30 21:56:32