我试图弄清楚如何正确使用多个文件。我在头文件中创建了一个类。然后是一个包含该头文件并使用Stage :: Stage(){}等实现所有内容的cpp文件。我还创建了一个名为Display的类,它没有默认构造函数,但需要2个整数参数。我在Stage类中创建了一个函数:
Stage::Stage (Display &display_){
display = display_;
}
但它会导致错误"没有匹配功能来调用' Display :: Display()'" 这是真的,它不存在,但它不应该存在。我不想在这里创建一个新的Display对象,我试图将现有的对象传递给Stage对象。 (我使用Dev C ++)
答案 0 :(得分:3)
在执行构造函数体之前,您的Stage
构造函数必须默认初始化display
。必须在执行类的构造函数的主体之前构造所有类成员。没有例外。因此,显示的代码在使用赋值运算符之前尝试默认构造display
。
由于Display
没有默认构造函数,因此失败,因此编译器抱怨没有defualt构造函数。
在这种情况下,您必须在构造函数的初始化部分显式构造display
:
Stage::Stage (Display &display_) : display{display_}
{
}
或者,预C ++ 11:
Stage::Stage (Display &display_) : display(display_)
{
}
这从一开始就明确地构造了display
成员,大概是使用它的拷贝构造函数。