C++:如何将对象传递给另一个对象构造函数?

Yem*_*lat 0 c++ constructor pass-by-reference

我知道这个问题很多,但我来自Java,而且我很长时间没有做过任何C/C++.

你能否提醒我如何在C++中正确地将对象传递给另一个对象的构造函数?

例如,我需要将一个新的Light对象传递给Button构造函数:

// LED Light
class Light {
    int pin;

    public:
        Light(int p) {
            pin = p;
        }
};

// BUTTON
class Button {
    Light ledLight;

    public:
        Button(Light l) {
            ledLight = l;
        }

};

Light my_led(0);

Button my_button(my_led);
Run Code Online (Sandbox Code Playgroud)

这就是我在类似Java的方面做的事情.但是,这会产生以下错误:

::  In constructor ‘Button::Button(Light)’:
::  16:19: error: no matching function for call to ‘Light::Light()’
::  16:19: note: candidates are:
::  6:3: note: Light::Light(int)
::  6:3: note:   candidate expects 1 argument, 0 provided
::  2:7: note: Light::Light(const Light&)
::  2:7: note:   candidate expects 1 argument, 0 provided
Run Code Online (Sandbox Code Playgroud)

对象是通过引用传递还是在创建新Button时尝试创建新对象?

或者我是否需要将Light声明为Button的构造函数中的指针?

任何帮助都是非常有用的!

yiz*_*lez 7

程序尝试启动ledLight使用默认构造函数然后分配lledLight.编译器会给你一个错误,因为没有默认的构造函数Light.试试这个:

Button(Light l): ledLight(l) { }
Run Code Online (Sandbox Code Playgroud)