繁体   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