2017-02-28 94 views
3

我想弄清楚如何正确使用多个文件。我在头文件中创建了一个类。然后一个包含该头文件并使用Stage :: Stage(){}实现所有内容的cpp文件。我还创建了一个名为Display的类,它没有默认构造函数,但需要2个整数参数。我取得了Stage类的函数:C++将对象传递给函数,其构造函数被称为

Stage::Stage (Display &display_){ 
    display = display_; 
} 

但它会导致错误 哪个是真实的,不存在“的呼吁‘显示::显示()’不匹配函数”,但它不应该需要存在。我不想在这里创建一个新的Display对象,我试图将现有的对象传递给Stage对象。 (我正在使用Dev C++)

+2

'display = display_;'意味着调用'display'的赋值操作符。你没有说'display'是什么,但可能它是'Stage'的成员变量,它必须已经由此构建 –

回答

3

构造函数的构造函数在执行构造函数的主体之前必须默认初始化display。在执行类的构造函数的主体之前,必须构造所有类成员。没有例外。因此,显示的代码尝试在使用赋值运算符之前默认构造display

由于Display没有默认构造函数,因此失败,因此您的编译器抱怨没有构造函数的构造函数。

在这种情况下,你必须明确地构建display在构造函数初始化部分:

Stage::Stage (Display &display_) : display{display_} 
{ 
} 

,或者预先C++ 11:

Stage::Stage (Display &display_) : display(display_) 
{ 
} 

这明确地构建display成员权从一开始,可能会使用它的复制构造函数。

相关问题