2016-08-04 146 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 –