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