【发布时间】:2017-02-12 13:13:27
【问题描述】:
我什么都试过了,这东西简直是毫无意义,真的…… 这是有问题的代码:
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 个参数”是认真的吗?那么为什么常规通话有效呢? 我无法真正解决,不胜感激。
谢谢。
【问题讨论】:
-
Docs: "这个实现支持最多有九个参数的函数对象。"
-
如果我在浪费时间之前只阅读文档...
-
能否请您在答案中重写您的评论以便我接受?