4

次のコード例では、オーバーロードされた純粋な抽象メソッドを実装する で、オーバーロードされAbstractBaseClass::DoAThing( const char* )たメソッドが継承されたメソッドとして表示されないのはなぜですか?SomeEndClassDoAThing( const char* const* )

class AbstractBaseClass
{
    public:

        virtual void DoAThing( const char* withThis ) {}
        virtual void DoAThing( const char* const* withThat ) = 0;

        AbstractBaseClass() {}
        virtual ~AbstractBaseClass() {}
};

class SomeMiddlewareClass : public AbstractBaseClass
{
    public:

        void ThisIsCool() {}

        SomeMiddlewareClass() {}
        virtual ~SomeMiddlewareClass() {}
};

class SomeEndClass : public SomeMiddlewareClass
{
    public:

        void DoAThing( const char* const* withThat ) {}

        SomeEndClass() {}
        virtual ~SomeEndClass() {}
};

void SomeFunction()
{
    SomeEndClass* myClass = new SomeEndClass();

    myClass->DoAThing( "withThis" );
    ((SomeMiddlewareClass*)myClass)->DoAThing( "withThisToo" );

    delete myClass;
}

コンパイラ (およびインデクサー) は、行が受け入れられmyClass->DoAThing( "withThis" );ている間、その行で次のエラーを生成します。((SomeMiddlewareClass*)myClass)->DoAThing( "withThisToo" );

無効な引数 ' 候補は次のとおりです: void DoAThing(const char * const *)

「SomeEndClass::DoAThing(const char [9])」の呼び出しに一致する関数がありません</p>

実装SomeEndClassを継承すべきではありませんか?AbstractBaseClass::DoAThing( const char* )私は何を間違っていますか?

4

2 に答える 2