C++ Multi-level virtual Inheritance compilation problem

203 views Asked by At

I am working on a C++ project wherein I am making use of multi-level inheritance.

This is my sample code:

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;
}

Can somebody explain me what is wrong in this code.

error: no matching function for call to 'ClassA::ClassA()'
ClassC(int a,int b,int c) : ClassB(a, b, c) {}

1

There are 1 answers

0
Jarod42 On BEST ANSWER

From Derived class:

All virtual base subobjects are initialized before any non-virtual base subobject, so only the most derived class calls the constructors of the virtual bases in its member initializer list:

So your class should be modified to:

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