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

时间:2018-10-12 13:37:05

标签: 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;
}

有人可以向我解释这段代码有什么问题吗?

  

错误:没有匹配的函数可以调用'ClassA::ClassA()'
  ClassC(int a,int b,int c) : ClassB(a, b, c) {}

1 个答案:

答案 0 :(得分:1)

来自Derived class

  

所有虚拟基础子对象都在任何非虚拟基础子对象之前初始化,因此,仅最派生的类在其成员初始化器列表中调用虚拟基础的构造器

因此您的班级应修改为:

OriginalCount * dict1[Column1ValueN]