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

Problem with reference variable as function parameter in c++

本文关键字:参数 问题 函数 变量 c++ 引用      更新时间:2024-09-26

我已经将一个类声明为:

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_lay_config(app_cmd.get_command_parameter((.substring(2((;(行i有以下错误:

没有重载函数的实例"my_program::执行器::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引用传递-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);