2016-07-26 9 views
0

私は2つのクラス、両方のクラスを使用してインターフェイスと実装を持っている状況があります。インターフェイスの外でパブリック仮想派生クラスを使用する

class A : public virtual Interface<T>

class B : public virtual Interface<T>

class Bclass Aはパブリック仮想インターフェイスの派生クラスであるため、許可されていない、内部class Aを使用しています。次のエラーが表示されます。Aの新しいクラスを作成せずに次の操作を行う方法はありますか?

class Interface 
{ 
    virtual void foo() = 0; 
    virtual void bar() = 0; 
}; 

class A : public virtual Interface 
{ 
public: 
    void foo(){ } 
}; 

class B : public virtual Interface 
{ 
public: 
    void bar() 
    { 
     A a; 
    } 
}; 

class Implementation: public A, public B 
{ 
public: 
    Implementation() 
    { 
    } 
}; 

int main(){ 
    Implementation impl; 

    return 0; 
} 
+1

「A」はまだ純粋な仮想関数( 'bar')を持っているため、許可されていません。「宣言されたpublic virtual」とは何の関係もありません。 'A'をインスタンス化できるようにするには...何であれ、' bar'を実装する必要があります – donkopotamus

+0

クラスAは「public virtual」と宣言されていません。あなたは 'クラスA'に、すべての純粋仮想関数を追加しても – immibis

答えて

4

いいえ、インターフェイスですべての純粋仮想関数を実装していないため、Aをインスタンス化できません。


以下は私にとって役立ちます。

class Interface 
{ 
    virtual void foo() = 0; 
    virtual void bar() = 0; 

public: 
    virtual ~Interface() {} 
}; 

class A : public virtual Interface 
{ 
public: 
    void foo() override {} 
    void bar() override {} 
}; 

class B : public virtual Interface 
{ 
public: 
    void foo() override {} 

    void bar() override 
    { 
    A a; 
    } 
}; 

class Implementation : public A, public B 
{ 
public: 
    void foo() override { A::foo(); } 
    void bar() override { B::bar(); } 
}; 

int main() 
{ 
    Implementation impl; 

    return 0; 
} 
+0

、あなたがエラーを取得:Implemntation「 『' – pyCthon

+0

』に仮想のボイドインターフェイス::バー()」の 'なしユニーク最終overriderを私はのために働くいくつかのコードを追加しました私。 'A'と' B'は 'foo'と' bar'の両方を定義する必要があります。 'A'と' B'の両方が 'foo'と' bar'を定義しているので、 'Implementation'もそれらを定義する必要があります。そうでなければあいまいです。私は、使用する実装を任意に選択しました。 – evan

関連する問題