2016-11-26 5 views
-1

は私がコンパイルされません。次のプログラムを持っている:C++多重継承 - 基底クラスで同じメソッドが異なる引数を使って

class Interface1 
{ 
    virtual void f() = 0; 
}; 

class Interface2 
{ 
    virtual void f(int i) = 0; 
}; 

class Interface3 : public Interface1, 
        public Interface2 
{}; 

class C : public Interface3 
{ 
    virtual void f() {} 
    virtual void f(int i) {} 
}; 

int main() 
{ 
    Interface3* inter = new C(); 
    inter->f(); // Error 
} 

間違っていますか?メソッドが異なる引数型を持つかどうかは関係ありませんか?

エラー:メンバー 'F' の要求は
曖昧です。注:候補者は次のとおりです:仮想無効インターフェース1 :: F()
...
注:仮想無効インターフェイス2 :: F

(I int型)
+0

_これは間違っていますか?_ 'enter code here'です。あなたの質問を修正してください。ありがとうございました。 – skypjack

+0

ビルドエラーに関する質問を投稿するときは、常に質問本体に実際のエラーを含めてください。あなたの質問を編集して、完全で完全で編集されていないエラー出力(可能性のある情報ノートを含む)を質問に含めてください。次に、コメントなどで表示されるコードのどこにエラーがあるかを指摘します。 [良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)を読んで、[最小限の完全で検証可能な例](http:// stackoverflow。 com/help/mcve)。 –

+0

問題は 'class Interface3'(**' {}; **)ではなくtypo ** '{}:' **の宣言にあります。 –

答えて

1

2つの基本タイプのfの2つの定義が同じスコープ内で定義されていないため、オーバーロードしないという問題があります。 にはfという2つの別個の関数があり、いずれかを選択する規則はありません。

+0

しかし、関数名を保持したいのであれば、どうすれば修正できますか? – Dusan

+0

ソリューション:public:using Interface1 :: f; Interface2 :: fを使用します。 Interface3で追加する必要があります。 – Dusan

関連する問題