代码之家  ›  专栏  ›  技术社区  ›  Harry

C++多层次虚拟继承编译问题

  •  1
  • Harry  · 技术社区  · 6 年前

    这是我的示例代码:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Jarod42    6 年前

    Derived class

    只有最派生的类调用虚基的构造函数 在其成员初始值设定项列表中:

    所以你的课程应该修改为:

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