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 в этих классах. Но это не так. Это дает мне ошибку: ошибка: ссылка на 'х' неоднозначна Может ли кто-нибудь поставить свет?Невозможно избавиться от проблемы Diamond в C++
A) У вас нет алмазов. B) как компилятор должен знать, какой 'x' вы хотите? Вы знаете, какой 'x' вы хотите изменить? – NathanOliver
Виртуальное наследование не «объединяет» членов, оно «объединяет» подобъекты базового класса. – aschepler
Да, это не проблема с алмазом. согласовано. Я хочу изменить x из базового класса 1. – coder999