2016-06-17 18 views
0
class A : public B {} 

class B : public C {} 

class C 
{ 
public : 

    class D : public I<T1> 
    { 
     virtual void method() const; 
    }; 

    class E : public I<T2> 
    { 
     virtual void method() const; 
    }; 

    class F : public I<T2> 
    { 
     virtual void method() const; 
    }; 
public : 
    D d; 
}; 

私はクラスAの 'メソッド'をオーバーライドしたいと思いますか? 私は常にメッセージを取得:私が継承しているネストされたクラスのオーバーライドメソッド

エラー:メンバ関数を定義することはできません「メソッド」「」

+1

「A」は「D」から継承しません。エラーメッセージと完全なメッセージを生成するコードを表示してください。 – user463035818

+0

@JacekCzは仮想void C :: D :: method()(A)のように見えます – Lorac

+0

C++には、Javaesqueの意味。クラスにはネストされたクラスがあり、ネストされたクラスの型とそれがネストされているクラスの型の間には固有の関係はありません。 –

答えて

2

Aは、おそらくクラスA D、継承していないようです内:公共C :: Dは何をあなたを達成するに慾望。 CはDを継承しないので、基本クラスがこの派生エンティティにアクセスできないように、クラス自体を定義します。

編集:FWIW、これは可能ではない相続

2

いや、危険なパターンですが、Dはちょうどインナークラスであるため、Aはそれから派生しません。

DCの外で定義されていた場合、あなたは、基本クラスのいくつかの方法で、一部(この場合には、Aはどのような方法でDから派生していない)でない関数をオーバーライドすることができないように、それはまったく同じです。

//How would A override a method in D? It can't, A has nothing to do with D 
class A : public B {}; 
class B : public C {}; 
class C {} 
class D { virtual void method() const {} } 
+0

唯一の方法は、D内のクラスの型をチェックして、方法の? – Lorac

+0

@ロラック申し訳ありませんが、私はあなたが何を求めているのか正確には分かりません。 – Rakete1111

+0

C言語でメソッドを移動することはできません。メソッドでは「method」のメソッドが約15個あります。 – Lorac

関連する問題