C++多级虚继承编译问题

标签 c++ constructor virtual-inheritance ctor-initializer

我正在开发一个 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;
}

谁能解释一下这段代码有什么问题。

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

最佳答案

来自 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:

所以你的类应该修改为:

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

关于C++多级虚继承编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52780732/

相关文章:

c++ - 如何生成无限随机数的一对骰子直到它们相等?

c++ - 将指向对象数组的指针传递给函数

javascript - 删除对 "new"的需要

c++ - 为什么虚拟继承会导致指针偏移?

c++ - std::map 的所有迭代器的模板特化

c++ - 尝试多态性时出错

java - 方法引用是否摆脱了可重写的方法调用?

c# - EF Code First 方法中 DbContext 类的空构造函数的目的是什么?

c++ - 虚拟继承和函数成员

c++ - 使用抽象类的容器来容纳子类