[英]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));) 行中我有以下錯誤:
沒有重載 function "my_program::Actuator::set_relay_config" 的實例與參數列表匹配——參數類型為:(字符串)——object 類型為: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 值不能修改,因此不能通過引用傳遞給 function。
要解決此問題,您需要:
將其作為 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.