2011-01-15 9 views
3

なぜこれが機能しないのか、良い選択肢は何ですか?それはそれのように見えるために必要最低限​​C++:祖父母メソッドへのアクセス

class Grandparent 
{ 
    void DoSomething(int number); 
}; 

class Parent : Grandparent 
{ 
}; 

class Child : Parent 
{ 
    void DoSomething() 
    { 
     Grandparent::DoSomething(10); // Does not work. 
     Parent::DoSomething(10); // Does not work. 
    } 
}; 

答えて

11
class Grandparent 
{ 
protected: 
    void DoSomething(int number); 
}; 

class Parent : protected Grandparent 
{ 
}; 

class Child : Parent 
{ 
    void DoSomething() 
    { 
     Grandparent::DoSomething(10); //Now it works 
     Parent::DoSomething(10); // Now it works. 
    } 
}; 

。クラスで作業するときは、デフォルトではプライベートですが、これはサブクラスからのものです。

http://codepad.org/xRhc5ig4

コンパイルし、実行し、完全な例があります。

+4

'struct 'のメンバーは、デフォルトではpublicであることに注意してください。実際、 'class'と' struct'の唯一の違いは、 'class'メンバーはデフォルトでprivateであり、' struct'メンバーはデフォルトでpublicです。 –

+0

明確にするために編集しました。覚えてありがとうございます。 –

+0

ええ、私はちょうどOPを修正して、今私は私の例をコンパイルし、それは動作します...私は私の実際のコードで間違って何をしているかを調べる必要があります。ありがとう。 –

0

コードがコンパイルされなかったと思います。プリンシパルソースには、メソッドChild::DoSomething()の戻り値の型指定子がありませんでした。

+0

それは問題ではありませんでした。私はちょうど例でそれを偶然残しました。 –

+0

@Jayオクラホマ、私は最初にそれを見た。次のエラーの原因は、パブリック継承が子クラスの親のプライベートメンバーを隠すので、親のアクセスレベルを上げる必要があるということです.Joshuaの回答 –

+0

のように私的継承を意味しませんか? –

関連する問題