コンパイラ エラー C2385
'member' へのアクセスがあいまいです
メンバーは複数の基本型から継承され、そのメンバーへの非修飾アクセスがあいまいになります。 このエラーを解決するには、次の方法があります。
- メンバーへのアクセスを明示的に修飾します。
- メンバーにアクセスする前に、メンバーを含む基底クラスにオブジェクトをキャストします。
- 基底クラスのあいまいなメンバーの名前を変更します。
- メンバーをスコープに取り込みます。
例
次の例では C2385 が生成されます。
// C2385.cpp
struct A
{
void func1(int i) {}
void func2() {}
};
struct B
{
void func1(char c) {}
void func2() {}
};
struct C : A, B
{
// Uncomment the following lines to resolve the first 2 errors
// The error below for the call to c.func2() will remain
// using A::func1;
// using B::func1;
};
int main()
{
C c;
c.func1(123); // C2385
c.func1('a'); // C2385
c.func2(); // C2385
c.A::func2(); // OK because explicitly qualified
c.B::func2(); // OK because explicitly qualified
static_cast<A>(c).func2(); // OK because of the cast
static_cast<B>(c).func2(); // OK because of the cast
}
あいまいな呼び出しを func1
解決するには、両方のオーバーロードをスコープに取り込みます。 ただし、これは引数をfunc2
受け取らないのB::func2
A::func2
で機能しないので、それらを呼び出すことはパラメーターによって区別できません。 この問題は、次の方法で解決できます。
- スコープに使用するものを紹介する
- 基本型で呼び出しを明示的に修飾する
- 関数を呼び出す前にオブジェクトをキャストします。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示