다음을 통해 공유


컴파일러 오류 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 을 해결할 수 있습니다. 그러나 인수를 호출하는 것은 매개 변수로 B::func2 구분될 수 없으므로 인수를 사용하지 않기 때문에 A::func2 작동하지 func2 않습니다. 다음을 통해 문제를 해결할 수 있습니다.

  • 범위에 사용하려는 항목 소개
  • 기본 형식으로 호출을 명시적으로 한정
  • 함수를 호출하기 전에 개체를 캐스팅합니다.