E2247 'member' はアクセスできない (C++)
C++ クラスメンバー 'member' を参照しようとしましたが,private または protected なので,この関数からは参照できません。
これは,アクセス可能なオーバーロードメンバー関数(またはコンストラクタ)を呼び出そうとしたが,引数がアクセス不可の関数に一致する場合などに発生します。
オーバーロードの解決は,常にアクセス可能性のチェックの前にチェックされます。
これが問題になる場合は,いくつかのパラメータを明示的にキャストして,目的のアクセス可能な関数を選択してください。
仮想基本クラスのコンストラクタは,大部分の派生クラスのスコープからアクセスできる必要があります。C++ では,階層の末端でも常に最初に仮想基本クラスが構築されるためです。例を示します。
class A {
public:
A();
};
class B : private virtual A {};
class C : private B {
public:
C();
};
C::C() {} // エラー。A::A() にアクセスできません
A は B に対して private であり,B は C に対して private なので,A のコンストラクタは C からアクセスできません。しかし,C のコンストラクタは,仮想基本クラス A のコンストラクタを呼び出せなくてはなりません。B が A を public として継承している場合は,このコードをコンパイルできます。