2011-07-19 12 views
5

は、私は、次があります。C++での子関数で純粋仮想関数や未使用の引数

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が引数を持たないようにするために使用できる方法はありますか?

感謝します。

+3

を、より良いconst参照によってベクトルを渡します。 – kennytm

+1

これはほとんど「オーバーロードの問題」ではありません。マイナーな警告をここでお伝えします:-) –

+0

タイトルの過負荷を取り除くための編集は同意します。 – ale

答えて

18

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

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

警告を解決する必要があります。

、何らかの理由であなたのコンパイラがそれをサポートしていない場合 - これを行う:あなたは `arg1`と` arg2`をコピーする場合を除き

// 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; 
} 
+1

コンパイラに応じて、#pragma文を使用してこの警告を無効にすることもできます。 VC++の場合:#pragma warning(disable:warningNumber)。 Borlandの下:#pragma warn -nnn。 GCCの下で私は知らない。 – Shlublu

+1

@Shlublu - はい、しかし、私は警告を抑制することは悪いことだと思います。この場合はかなり簡単です(2番目の解決策は少し汚いですが)。 – littleadv

+0

完璧な感謝。 stackoverflowのソリューションマーキングの期限が切れると受け入れます。 – ale