我想知道以下两个代码的确切区别。我很清楚,如果我正在创建Derived类的对象,则程序都会抛出错误。这是因为基类的构造函数是私有的。
我正在使用以下版本的gcc gcc版本4.8.3 20140627 [gcc-4_8-branch revision 212064](SUSE Linux)
请让我知道为什么第一个程序在编译时没有显示任何错误。但第二个显示编译中的错误。
No error
****************************************
class Base
{
private:
Base()
{
cout << "Base constructor" << endl;
}
};
class Derived:public Base
{
};
int main()
{
return 0;
}
Throwing Error at compilation time
*****************************************
class Base
{
private:
Base()
{
cout << "Base constructor" << endl;
}
};
class Derived:public Base
{
public:
Derived()
{
}
};
int main()
{
return 0;
}
答案 0 :(得分:3)
编译器为第一个Derived
隐式声明的默认构造函数被定义为已删除;如果您尝试使用该构造函数,将发生编译错误。在第二个Derived
中显式声明的构造函数尝试调用私有基础构造函数,因此定义本身是格式错误的。