在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;
}
};
感谢。
答案 0 :(得分:0)
类show(ClOldClass&)
中的函数MyFooClass
与类show(OtherClass&)
中的函数CustomFoo
不同。新定义隐藏了另一个定义。
你是否真的想要超载而不是覆盖?如果要覆盖,则新函数需要具有与父类相同的签名。如果确实意味着重载该函数,您仍然需要其他show
。向您的班级using CustomFoo::show;
添加MyFooClass
指令。
//MyFooClass.h
class MyFooClass : public CustomFoo< ClOldClass, ClNewClass >
{
public:
virtual std::auto_ptr<ClNewClass> show(ClOldClass &oc) {...}
protected:
using CustomFoo::show;
};