簡體   English   中英

參考變量作為 c++ 中的 function 參數的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM