以下の図は、この問題に対する 3 つの独立したテストを示しています。
(関数の定義ではなく、宣言に焦点を当てています ~~ )
なぜ右の方が「 'A' is an inaccessible base of 'B' 」 というエラーになったのだろう。
g++ が派生クラスによってベースへの参照を初期化しているように見えるのはなぜですか (保護された継承によるエラーが発生します)。
真ん中のような変換演算子を使用して B を A に変換し、渡すのではなく (エラー 0、警告 0)。
写真の右側のコードは次のとおりです。
struct A {
A &operator=( const A & ) { return *this; }
}a;
struct B : protected A {
operator A() { return A(); };
}b;
int main( void )
{
a = b;
return 0;
}
助けてくれてありがとう!~