【求助】请教一个c++的问题。。自己看不出来了

编写代码遇到下面这个问题。

有这样一个函数
static CallFuncN * create(const std::function<void(Node*)>& func);

用以下方式调用调用
CallFuncN::create(CC_CALLBACK_1(GameObjMap::releaseElementToPool, s1));

显示的错误信息为No matching function for call to “create”

调用相关信息如下。
#define CC_CALLBACK_1(selector,target, …) std::bind(&selector,target, std::placeholders::_1, ##VA_ARGS)
void GameObjMap::releaseElementToPool(Node* n);

s1 是Sprite*类型
继承关系为class Sprite : public Node, public TextureProtocol

c++学得不精,感觉作为Node的子类应该可以作为参数的,不知道哪想错了,求大神帮助。

我好像蠢了,想明白一点,不知道对不对。
CallFuncN::create(CC_CALLBACK_1(GameObjMap::releaseElementToPool, s1));
这个s1的位置,应该放置的是调用GameObjMap::releaseElementToPool的指针(GameObjMap* 指针),不是那个参数。

那么那个参数我该如何传进去呢?

还是对std::bind不理解啊。。
这个是在函数调用的时候传进去的。

同样遇到这个问题了。。。楼主解决了么

static CallFuncN * create(const std::function<void(Node*)>& func);
这个声明了一个 名字叫做 create 返回值类型 为指向CallFuncN的指针的 静态全局函数

而你在调用的时候,却不是全局的,而是调用的
CallFuncN类的静态方法.

如果你要调用的是CallFuncN::create(CC_CALLBACK_1(GameObjMap::releaseElementToPool, s1)); 这个样子的方法的话,
那么,声明的时候应该这样写:
static CallFuncN* CallFuncN::create();

如果你要调用他 static CallFuncN * create(const std::function<void(Node*)>& func);
你应该直接create(…arguemnts); 前面不要加 命名空间名.

btw, 你这也是苟小白的, 我这没学过c++的,都能看的出来的错误
,诶,加油吧.

CallFuncN的里面的node参数自动传人动作的执行者
比如a->runAction(CallFuncN::create(CC_CALLBACK_1(CLASS::func1,b)))
执行的是b->func1(a)
如果你想传入别的node作为参数,可以使用CallFunc
a->runAction(CallFunc::create(CC_CALLBACK_0(CLASS::func2,b,c)))
这样就会执行 b->func2©

但是这么用会有个缺点,就是动作执行过程中c可能就被autorelease掉了,需要自己想办法去retain release

好久没上,今天过来提问题看到了你的回复。

兄弟。 不会c++就不要乱说,std::bind的返回类型是std::function

有兴趣可以看一下这个 http://www.cplusplus.com/search.do?q=bind

多谢哦,这个方法可以。
那时候刚开始自学c++做游戏,什么都不懂。

CC_CALLBACK_1(GameObjMap::releaseElementToPool, s1),明明是CC_CALLBACK_1为毛还要去绑定一个参数,方法就接受一个参数,你绑定了他还怎么留位置给调用的时候传递的参数呢?

虽然我不确定我说的答案是对的, 但是很显然你没有看明白我在说啥。

我的回答是在说你传的参数的问题么? 我说的问题 和bind 有毛线关系啊。
我说的是你 create前面的命名空间问题。

你在看一下:11::11::11::11: