c++

问题描述

我已将一个类声明为:

    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));) 行我有以下错误

没有重载函数的实例 "my_program::Actuator::set_relay_config" 匹配参数列表—— 参数类型是: (String) -- 对象类型是: 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() 方法返回的 String 类型的 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);