2016-08-04 152 views
0

我已經定義的方法具有可選/默認最後一個參數稱爲noAutoResolve如下:C++可選/默認參數

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解析外部符號「公共:無效__thiscall網絡服務:: send_message(類的std :: basic_string的,類的std ::分配器>類的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

+2

定義「不高興」。它是否抱怨有錯誤,如果有,錯誤是什麼? – Harald

+1

如果你確定*鏈接器*而不是*編譯器*是不快樂的,那麼你可能忘了鏈接函數的定義(.cpp)。但是請不要猶豫,發佈實際的錯誤信息:) – rustyx

+0

你是說當你不忽略最後一個參數時鏈接器是開心的嗎? – stijn

回答

0

您函數的參數fnstd::function<void(int, std::shared_ptr<msg::IMessage> msg)>的類型。但是,要傳遞的拉姆達是:

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

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

因此,您的問題與可選參數無關。爲了速戰速決,如果你有機會到C++編譯器14,嘗試獲得拉姆達參數auto

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

你好,感謝你的帖子。我其實忘了提及我正在使用以下typedef:\t'typedef std :: shared_ptr TMessagePtr;'。就像上面說的那樣,在添加最後一個參數之前,即使使用我提供的lambda,一切正常。對不起,沒有提到 – user66875

+0

@ user66875,哦,那好吧。 –

+1

我一直在想,但後來我認爲可能TMessagePtr是一個共享指針的typedef –