1

派生クラスである Dialin が抽象クラスであることに問題があります。私が持っている唯一の仮想関数には同じパラメーターと同じ戻り値の型があるため、その理由はわかりません。私が読んだことから、それが唯一の制限ですが、明らかに私は間違っています。

これが私のコードです:

ヘッダ:

class Event{
    class ModemSimV2;

public:
    Event( );
    Event( const Event &e );
    ~Event( );

    virtual void process( ModemSimV2 &m ) = 0;

protected:
    int who;        // the number of the user
    int time;       // when the event will occur
    int what;       // DIAL_IN or HANGUP
};


 class Dialin : public Event{
     class ModemSimV2;
 public:
     Dialin( int name = 0, int tm = 0 );
     Dialin( const Dialin &d );
     ~Dialin( );

     virtual void process( ModemSimV2 &m );

 private:
     int who;
     int time;
     int what;
 };

ソース:

Event::Event(){
}

Event::Event( const Event &e ) {
    *this = e;
}

Event::~Event( ) {
}

Dialin::Dialin (int name, int tm )
: time( tm ), who( name ) { 
    return;
}

Dialin::Dialin ( const Dialin &d ) {
    *this = d;
}

Dialin::~Dialin( ) {
}

void Dialin::process( ModemSimV2 &m ) {        
}
4

1 に答える 1

9

問題は、という名前のクラスの 2 つの異なる前方宣言があることですModemSimV2

Event::ModemSimV2          // These are different classes
Dialin::ModemSimV2         // with the same unqualified name.

ではEvent、 の署名process()は次のとおりです。

virtual void process( Event::ModemSimV2 &m ) = 0;

Dialin定義でprocess()は、実際には次のとおりです。

virtual void process( Dialin::ModemSimV2 &m );

そのため、 で宣言された純粋仮想関数はEventで実装されていませんDialin

于 2012-04-10T17:07:15.597 に答える