Please have a look at the code:
#include <iostream>
using namespace std;
class base1
{
public:
int x,y;
};
class base2
{
public:
int x, z;
};
class derived: virtual public base1,virtual public base2
{
public:
void display(int a, int b, int c)
{
x=a;
y=b;
z=c;
cout<<x<<endl<<y<<endl<<z<,endl;
}
};
int main()
{
derived dr;
dr.display(1,2,3);
}
기본 클래스 인 base1과 base2가 가상으로 만들어 지므로이 클래스의 x 선언 문제를 해결해야합니다. 하지만 그렇지 않습니다. 그것은 나에게 오류가 발생했습니다 : 오류 : 'x'에 대한 참조가 모호합니다 빛을 넣어 주실 수 있습니까?C++에서 다이아몬드 문제를 제거 할 수 없습니다.
A)를 더 다이아몬드가 없습니다. B) 컴파일러는 당신이 원하는'x'를 어떻게 알아 내야할까요? 어떤'x'를 수정하고 싶은지 알고 있습니까? – NathanOliver
가상 상속은 멤버를 "병합"하지 않으며 기본 클래스 하위 개체를 "병합"합니다. – aschepler
예. 다이아몬드 문제는 아닙니다. 동의했다. 기본 클래스 1에서 x를 수정하고 싶습니다. – coder999