C++可选/默认参数
我已经定义的方法具有可选/默认最后一个参数称为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
您函数的参数fn
是std::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){
// .....
}
你好,感谢你的帖子。我其实忘了提及我正在使用以下typedef:\t'typedef std :: shared_ptr
@ user66875,哦,那好吧。 –
我一直在想,但后来我认为可能TMessagePtr是一个共享指针的typedef –
定义“不高兴”。它是否抱怨有错误,如果有,错误是什么? – Harald
如果你确定*链接器*而不是*编译器*是不快乐的,那么你可能忘了链接函数的定义(.cpp)。但是请不要犹豫,发布实际的错误信息:) – rustyx
你是说当你不忽略最后一个参数时链接器是开心的吗? – stijn