在C++中,我想一個類轉換到另一個類,所以我決定創建一個模板類,但我有一個編譯錯誤,這裏是錯誤,虛函數覆蓋預期錯誤
"MyFooClass.h", line 10: error (etoa:4997):
function "IFoo::show(OtherClass &)" is hidden by
"MyFooClass::show" -- virtual function override
intended?
virtual std::auto_ptr<ClNewClass> show(ClOldClass &oc)
這裏是我的代碼,
//IFoo.h
class IFoo
{
public:
virtual ~IFoo(){}
protected:
virtual std::auto_ptr<OtherClass> show(OtherClass &oc) = 0;
};
//CustomFoo.h
template<typename oldClass, typename newClass>
class CustomFoo : public IFoo
{
public:
virtual std::auto_ptr<newClass> show(oldClass &oc)=0;
protected:
virtual std::auto_ptr<OtherClass> show(OtherClass &oc)
{
std::auto_ptr<OtherClass> result(show(static_cast<oldClass &>(oc)));
return result;
}
};
//MyFooClass.h
class MyFooClass : public CustomFoo< ClOldClass, ClNewClass >
{
public:
virtual std::auto_ptr<ClNewClass> show(ClOldClass &oc)
{
std::auto_ptr<ClNewClass> cnv(new ClNewClass(oc.params));
return cnv;
}
};
謝謝。
該「班級轉換」的目的是什麼?什麼是'MyFooClass'實際上應該做的? – jogojapan
這是一個適配器類。我有另一個使用ClOldClass的類,但我想將其更改爲ClNewClass。但是我不想讓其他類發送一個新類,而是仍然使用ClOldClass。但是,我的另一個班級正在使用ClNewClass。就像我正在改變我的另一個班級。 – domlao
'MyFooClass'最終來自'IFoo',但它並未正確覆蓋它的'show'功能。該函數的返回類型必須是'std :: auto_ptr',而不是'std :: auto_ptr '。你不能通過將另一個類放入類層次來改變這個事實,該類將正確的函數替換爲'protected',並引入一個新的類作爲'public'。 –
jogojapan