5

私は次のものを持っています:

class Parent {
public:
    virtual bool foo(vector<string> arg1, vector<string> arg2) = 0;
};

class Child : public Parent {
public:
    bool foo(vector<string> arg1, vector<string> arg2);
};

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2) {
    return false;
}

foo(...) は純粋仮想関数であるため、親実装はありません。親は、foo が 2 つのベクトル引数を取ると述べています。子は 2 つの文字列引数を使用して正しく実装しますが、それらは使用されません。ただし、親の一部の子はこれらの引数を使用するため、常にそこにある必要があります。

親がそうしなければならないと言っていても、オーバーロードを使用して、指定された Child クラスの foo が引数を持たないようにする方法はありますか?

どうもありがとう。

4

1 に答える 1

18

パラメータ名を指定しないでください:

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string>, vector<string>) {
    return false;
}

これで警告が解決するはずです。

何らかの理由でコンパイラがサポートしていない場合は、次のようにします。

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2) {
    (void)arg1; (void)arg2; // ignore parameters without "unused" warning
    return false;
}
于 2011-07-19T20:29:51.383 に答える