Bagikan melalui


Compiler Error C2385

akses ambigu dari 'anggota'

Anggota diwarisi dari lebih dari satu jenis dasar, membuat akses yang tidak memenuhi syarat ke anggota tersebut ambigu. Untuk mengatasi kesalahan ini:

  • Secara eksplisit memenuhi syarat akses ke anggota.
  • Transmisikan objek ke kelas dasar yang berisi anggota sebelum mengakses anggota.
  • Ganti nama anggota ambigu di kelas dasar.
  • Bawa anggota ke dalam cakupan.

Contoh

Sampel berikut menghasilkan 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
}

Anda dapat menyelesaikan panggilan func1 ambigu dengan membawa kedua kelebihan beban ke dalam cakupan. Namun, ini tidak berfungsi func2 karena A::func2 dan B::func2 tidak mengambil argumen, jadi memanggilnya tidak dapat dibingkai oleh parameter mereka. Anda dapat mengatasi masalah ini dengan:

  • Perkenalkan yang ingin Anda gunakan ke dalam cakupan
  • Secara eksplisit memenuhi syarat panggilan dengan jenis dasar
  • Transmisikan objek sebelum memanggil fungsi .