多重继承中没有匹配的函数

时间:2016-11-15 05:02:15

标签: c++ c++11 inheritance multiple-inheritance delegating-constructor

我是C ++继承的新手,并决定尝试一些实验来了解这个主题。

下面的代码显示了我创建的类的层次结构:

classes.h

base::base(int a, int b)
{
    // ...
}

classes.c

{{1}}

编译器向我显示消息:

  

没有用于调用sub_one :: sub_one()

的匹配函数      

没有用于调用sub_one :: sub_one()

的匹配函数      

没有用于调用sub_two :: sub_two()

的匹配函数      

没有用于调用sub_two :: sub_two()

的匹配函数

我无法找出问题所在。

2 个答案:

答案 0 :(得分:2)

sub_three(int a, int b, int c = 0) : base(a, b) 
{
    // do something    
}

相当于:

sub_three(int a, int b, int c = 0) : base(a, b), sub_one(), sub_two() 
{
    // do something    
}

由于sub_onesub_two中没有此类构造函数,编译器会报告错误。您可以将默认构造函数添加到sub_onesub_two以删除错误。

答案 1 :(得分:1)

sub_three构造函数初始化base,并调用不存在的sub_onesub_two的默认构造函数,您可能需要

class sub_three : public sub_one, public sub_two
{
private:
    bool flag;
public:
    sub_three(int a, int b, int c = 0)
       : base(a, b), sub_one(a,b), sub_two(a,b,c), flag(false)
    {
        // do something    
    }
};