У меня возникла проблема с виртуальным наследованием, это пример кода для виртуального наследования.
У меня возникла проблема, как показано ниже
предупреждение: «Sofabed» не имеет внешнего виртуального определения методов; его vtable будет генерироваться в каждой единице перевода.
Кровать и диван также получили такое же предупреждение.
Как я могу исправить эту проблему?
Запустите этот пример кода на
- Ma c OS 10.14.6
- Qt Creator 4.11.1
- На основе Qt 5.14.1 (Clang 10.0 (Apple), 64 бит)
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
class Furniture { //common base class
protected: int weight;
public:
void SetWeight(int a=0) { weight=a; }
int GetWeight() { return weight; }
void ShowWeight() {
cout << "weight=" << weight << endl;
}
};
class Sofa : virtual public Furniture {
public:
void sit() { cout << "sit!" << endl; }
//void ShowWeight() {
// cout << “Sofa weight=” << weight; }
};
class Bed : virtual public Furniture {
public:
void lie() { cout << "lie!" << endl; }
//void ShowWeight() {
// cout << “Bed weight=” << weight; }
};
class Sofabed : public Sofa, public Bed {
public:
void fold() { cout << "fold!" << endl; }
};
int main()
{
Sofabed obj;
obj.sit();
obj.lie();
obj.fold();
obj.SetWeight(100);
obj.ShowWeight();
return 0;
}