我有以下两个类:
class Image
{
public:
Image(int size) { _size = size; };
~Image();
private:
int _size;
};
class Renderer
{
public:
Renderer(int size = 10) { _image = {size}; };
~Renderer();
private:
Image _image;
};
编译时我得到:"没有合适的默认构造函数"。
如果我添加Image();
,则错误消息消失。
所以我的问题是,为什么空构造函数是必要的?它会在哪种情况下被召唤?
答案 0 :(得分:3)
因为在Renderer
的构造函数中,必须首先构造Image
成员,然后才能输入构造函数体。在您的Renderer
构造函数体中,您将分配给该成员,您不会构建它。
如果你这样做,错误消失而不必为Image
提供默认构造函数:
Renderer(int size=10): _image(size) { }
答案 1 :(得分:1)
您正在Rendered类中创建一个成员" Image _image" ...在创建时没有传递任何参数。要处理这种无参数对象创建,需要使用默认构造函数