问题描述
我已将一个类声明为:
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);