2015-07-20 266 views
1

我正在尝试创建一个名为的对象,名为。该对象由温度计对象,内存对象,LED对象。最后三节课完全分开。但是,当我尝试在照明类中粘贴所有内容时,我得到以下消息:对象组合C++:没有用于调用的匹配函数

luminary.cpp:11:112:错误:没有匹配函数调用'Thermometer :: Thermometer()' luminary.cpp: 11:112:错误:没有匹配函数调用'Memory :: Memory()'
luminary.cpp:11:112:错误:没有匹配函数调用'Led :: Led()'

规范灯具类的头文件:

class Luminary{ 

public: 
    //Constructor 
    Luminary(Led led,Thermometer thermometer,Memory memory); 

    //Atributes 
    Led _led; 
    Thermometer _thermometer; 
    Memory _memory; 
} 

代码CPP文件:

#include "luminary.h" 
#include "Led.h" 
#include "Thermometer.h" 
#include "Memory.h" 


//Constructor 
Luminary::Luminary(Led led,Thermometer thermometer,Memory memory){ 

    _memory = memory; 
    _thermometer = thermometer; 
    _led = led; 

} 

为什么我会收到这些消息?

+0

您需要为'Led','Thermometer'和'Memory'定义默认构造函数。 –

+2

@ForhadAhmed:不太可能。这是一个基本的“分配而不是初始化”的错误,并且通过给予零的默认构造函数来解决这个问题并不是适当的解决方案。 –

回答

4

据源,LedThermometerMemory必须缺省构造,意味着他们应该有一个默认的构造,但他们没有。

你可以在这里使用member initializer list

Luminary::Luminary(Led led,Thermometer thermometer,Memory memory) 
    : _led(led), _thermometer(thermometer), _memory(memory) {} 

Here是关于为什么在moust情况下,你应该使用初始化列表,而不是分配的讨论。

+0

谢谢,它现在正在工作。 – Ihidan

+0

@GabrielVilella我已经添加了更多信息的参考,希望它可以帮助您更多。 – songyuanyao