簡體   English   中英

C ++可選/默認參數

[英]c++ optional/default argument

我定義了一個帶有可選/默認最后一個參數noAutoResolve ,如下所示:

typedef std::shared_ptr<IMessage> TMessagePtr;

class NetworkService : public IConnectionManagerDelegate, public net::IStreamDelegate
{    
public:   
    void send_message(std::string identity, msg::TMessagePtr msg, QObject* window, std::function<void(int, std::shared_ptr<msg::IMessage> msg)> fn, bool noAutoResolve = false);
}

然后:

void NetworkService::send_message(std::string endpoint, msg::TMessagePtr msg, QObject* window, std::function<void(int res, std::shared_ptr<msg::IMessage> msg)> fn, bool noAutoResolve)
{
}

現在,鏈接器對以下行中未解決的外部問題不滿意:在此我故意省略了最后一個參數:

service_->send_message(endpoint_, msg, this, [this](int result, msg::TMessagePtr msg){
        // .....

    });

這在c ++中是不可能的嗎?

錯誤LNK1120 1無法解決的外部QTServer QTServer.exe 1
錯誤LNK2019無法解析的外部符號“ public:void __thiscall NetworkService :: send_message(class std :: basic_string,class std :: allocator>,class std :: shared_ptr,class QObject *,class std :: function)>))(?send_message @ NetworkService @@ QAEXV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V?$ shared_ptr @ UIMessage @ msg @@@ 3 @ PAVQObject @@ V? $ function @ $$ A6AXHV?$ shared_ptr @ UIMessage @ msg @@@ std @@@ Z @ 3 @@ Z)在函數“ public:void __thiscall QTWindow :: ExecuteCommand(void)”中引用(?ExecuteCommand @ QTWindow @@ QAEXXZ)QTServer QTWindow.obj 1

函數的fn參數的類型為std::function<void(int, std::shared_ptr<msg::IMessage> msg)> 但是,您傳遞的lambda是:

 [this](int result, msg::TMessagePtr msg){
     // .....
 }

該函數具有void(int, msg::TMessagePtr)的簽名,因此,如果沒有從std::shared_ptr<msg::IMessage>msg::TMessagePtr ,則代碼無法編譯。

因此,您的問題與可選參數無關。 為了快速修復,如果您可以訪問C ++ 14編譯器,請嘗試將lambda參數獲取為auto

 [this](auto result, auto msg){
     // .....
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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