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);
我已将 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);