'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
않습니다. 다음을 통해 문제를 해결할 수 있습니다.
- 범위에 사용하려는 항목 소개
- 기본 형식으로 호출을 명시적으로 한정
- 함수를 호출하기 전에 개체를 캐스팅합니다.