共用方式為


編譯器錯誤 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 ,因為 A::func2B::func2 不採用自變數,因此呼叫它們無法依其參數來區分。 您可以透過下列方式解決問題:

  • 介紹您想要用於範圍的專案
  • 使用基底類型明確限定呼叫
  • 在呼叫 函式之前轉換 物件。