编译器

时间:2015-10-26 12:18:47

标签: c++

我有一个代码,我从库类中派生出一个类,其默认构造函数在库中定义。我没有定义任何默认构造函数,根据我的理解,C ++编译器应该为我提供但是我收到错误

error: no matching function for call to 'derived::derived()'
compilation terminated due to -Wfatal-errors.

我的代码如下面的代码段

#include <iostream>

using namespace std;

class base
{
    public :
    base()
    {
        ;
    }
};

class derived : public base
{
    public :
    derived(int) : base()
    {
        ;
    }
};

int main(int argc, char**argv)
{
    int i = 0;
    derived obj;
}

有人可以解释一下为什么编译器不会在这里生成默认构造函数吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

因为只有在不添加任何其他非默认构造函数时才会生成默认构造函数。

如果需要,您甚至可以在§12.1/ 4

的C ++标准中查找
  

X默认构造函数是类X的构造函数   要么没有参数,要么每个参数都不是a   function parameter pack有一个默认参数。 如果没有   用户声明的类X 的构造函数,一个没有的构造函数   参数隐式声明为默认值(...)。