c++中引用变量作为函数参数的问题

Problem with reference variable as function parameter in c++

我已将 class 声明为 :

    class Actuator
    {
    
    public :
        enum class Action
        {
                /*my enum member*/
        };
        
    private:
       /* my data member*/

    public :
        Actuator(uint8_t number);
        Actuator(uint8_t number, String& relay_config_string, String& led_config_string);
        Actuator(uint8_t number, const char* relay_config_string, const char* led_config_string);

        void set_relay_config (String& relay_config_string);
        void set_relay_config (const char* relay_config_string);
        String get_relay_config (void);
        
        void set_led_config (String& led_config_string);
        void set_led_config (const char* led_config_sring);
        String get_led_config (void);
        
        void set_state (bool state, bool change_flag = true);
        void set_state (String& state, bool change_flag = true);
        void toggle (bool change_flag = true);
        String get_state (void);

        
    };

并在 Actuator.cpp 文件中定义它。

我在 main.cpp 文件中写道:

int main ()
{
Actuator ac;

ac.set_state(app_cmd.get_command_parameter().substring(2), false);
ac.set_relay_config(app_cmd.get_command_parameter().substring(2));
return 0;
}

(ac.set_state(app_cmd.get_command_parameter().substring(2), false);) 没问题,但在 (ac.set_relay_config(app_cmd.get_command_parameter().substring (2));) 行我有以下错误:

no instance of overloaded function "my_program::Actuator::set_relay_config" matches the argument list -- argument types are: (String) -- object type is: my_program::ActuatorC/C++(304)

编辑:当我将 void set_relay_config (String& relay_config_string); 更改为 void set_relay_config (String relay_config_string);(即删除 &)时,它将得到解决。

你在这里做什么:

ac.set_state(app_cmd.get_command_parameter().substring(2), false);
ac.set_relay_config(app_cmd.get_command_parameter().substring(2));

您是否正在传递由 substring() 方法返回的字符串类型的 pr 值,请参阅: https://en.cppreference.com/w/cpp/language/value_category

R 值无法修改,因此无法通过引用传递给函数。

要解决此问题,您需要:

  • 将其作为常量引用传递 - const String&:

    void set_state (const String& state, bool change_flag = true);

    void set_relay_config (const String& relay_config_string);

  • 将其作为值类型传递 - 字符串:

    void set_state (String state, bool change_flag = true);

    void set_relay_config (String relay_config_string);