конструктор — C ++ Многоуровневая проблема компиляции виртуального наследования

Я работаю над проектом C ++, в котором я использую многоуровневое наследование.

Это мой пример кода:

class ClassA
{
public:
ClassA(int a,int b) : sum(a + b) {}
virtual ~ClassA() = default;

int sum;
};

class ClassB : virtual public ClassA
{
public:
ClassB(int a, int b, int c) : ClassA(a, b), c(c) {}

int c;
};

class ClassC : virtual public ClassB
{
public:
ClassC(int a,int b,int c) : ClassB(a, b, c) {}
};

int main()
{
ClassC objC(1, 2, 3);

std::cout << "sum=" << objC.sum << std::endl;
std::cout << "c=" << objC.c << std::endl;
}

Может кто-нибудь объяснить мне, что не так в этом коде.

ошибка: нет подходящей функции для вызоваClassA::ClassA()
ClassC(int a,int b,int c) : ClassB(a, b, c) {}

1

Решение

От Производный класс:

Все виртуальные базовые подобъекты инициализируются перед любым не виртуальным базовым подобъектом, поэтому только самый производный класс вызывает конструкторы виртуальных баз в списке инициализаторов его членов:

Таким образом, ваш класс должен быть изменен на:

ClassC::ClassC(int a, int b,int c):ClassA(a, b), ClassB(a, b, c) {}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector