2017-02-12 66 views
-2

我已经尝试了一切这件事根本是纯粹的非感,真的... 这里是有问题的代码:的boost ::绑定生病抱怨白白

CRoom* pRoom = &mRooms[pClient->iCurChannel][pClient->iCurRoom]; 
    pClient->bPendingOperation = true; 
    pRoom->OnBattlePlayerRespawn(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);// doesnt copmlain 
    pRoom->mMainData.mStrand.post(boost::bind(&CRoom::OnBattlePlayerRespawn, pRoom, pClient, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 55, 4563)); // complains, wtf? 

OnBattlePlayerRespawn声明如下:

void CRoom::OnBattlePlayerRespawn(CClient* pClient, uint32_t dwEquipItemSlot1, uint32_t dwEquipItemSlot2, uint32_t dwEquipItemSlot3, uint32_t dwEquipItemSlot4, uint32_t dwEquipItemSlot5, uint32_t dwSpecial1, uint32_t dwEquipItemSlot6, uint32_t dwEquipItemSlot7, uint32_t dwEquipItemSlot8, uint32_t dwEquipItemSlot9, uint32_t dwEquipItemSlot10, uint32_t dwSpecial2) 

编译错误:

`Error  no matching function for call to `bind(void (CRoom::*)(CClient*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t), CRoom*&, CClient*&, int, int, int, int, int, int, int, int, int, int, int, int)'` 
    candidate expects 2 arguments, 15 provided 
    pRoom->mMainData.mStrand.post(boost::bind(&CRoom::OnBattlePlayerRespawn, pRoom, pClient, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 55, 4563)); // complains, wtf? 

“候选期望2个参数,15 PR感谢“严肃?那为什么常规电话工作呢? 我真的不能解决,帮助将不胜感激。

谢谢。

+1

[文档](http://www.boost.org/doc/libs/1_63_0/libs/bind/doc/html/bind.html#bind.implementation。 number_of_arguments):“该实现支持具有多达9个参数的函数对象。” –

+0

如果我只是在浪费我的时间之前阅读文档... – WTFCoder123

+0

您能否在一个答案中重写您的评论,以便我可以接受? – WTFCoder123

回答

1

这个错误的原因很简单 - 你试图绑定太多的参数。

按照documentation

This implementation supports function objects with up to nine arguments. This is an implementation detail, not an inherent limitation of the design.

+0

非常感谢你,你为我节省了很多时间! – WTFCoder123