に導か保護された構造体のためにアクセスできない私はエラー:関数は、C++
struct A { void ohai() {} };
struct B: protected A {};
struct C: private A { friend int main();};
struct D: B { void test() { ohai();} };
struct E: C { void test() { ohai();} };
int main() {
A().ohai();
B().ohai();
C().ohai();
D().ohai();
return 0;
}
を持っている。しかし、私はこれらのエラーを理解していない
error: ‘void A::ohai()’ is inaccessible
struct A { void ohai() {} };
^
main.cpp:20:11: error: within this context
B().ohai();
^
main.cpp:8:17: error: ‘void A::ohai()’ is inaccessible
struct A { void ohai() {} };
^
main.cpp:22:11: error: within this context
D().ohai();
エラーが発生します。 B
はA
から継承されているため、Ohai
にアクセスできませんか?継承をpublic
に変更したときにエラーが発生しませんでした
編集:Difference between private, public, and protected inheritance私の質問には答えません。これは、あなたがAがプライベートであることを宣言しているされているので
「B」はしません。 'B'インスタンスから' ohai'を呼び出すことはできません。 – NathanOliver
これは重複していますが、なぜOPにはっきりしないのか理解できます。 コード内の誤解は、継承を保護しているので、WITHIN Bにアクセス可能ですが、外部からはアクセスできません。 つまり、 "B()。ohai()"という行は今は保護された関数をpublicと呼びません。 – Bilkokuya