1

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;
        }
};

ありがとう。

4

1 に答える 1

0

classの関数は、show(ClOldClass&)classの関数MyFooClassとは異なる関数です。新しい定義は他の定義を隠します。show(OtherClass&)CustomFoo

オーバーライドではなく、ここでオーバーロードするつもりだったのですか? オーバーライドする場合、新しい関数は親クラスと同じシグネチャを持つ必要があります。本当に関数をオーバーロードするつもりだった場合でも、その other が必要ですshowusing CustomFoo::show;クラスにディレクティブを追加しますMyFooClass

//MyFooClass.h
class MyFooClass : public CustomFoo< ClOldClass, ClNewClass >
{
    public:
        virtual std::auto_ptr<ClNewClass> show(ClOldClass &oc) {...}

    protected:
        using CustomFoo::show;
};
于 2012-10-13T10:30:05.117 に答える