根据我的理解,这应该有效:
const char* x = "x";
std::cout << x << std::endl;
将x传递给此函数:
void myClass::passAsVoid(void* v) {
std::cout << (const char*)v << std::endl;
}
第一个例子打印“x”;
第二个例子打印“\ 350 \ 224A”;
我想知道发生了什么,以及正确的做法!
实际代码:
float delay = 1;
std::string txt = "random filler text that is not lorum ipsum";
for (int i = 0; i < txt.length(); ++i) {
const char* x = "x";
std::cout << x << "code1" << std::endl;
CCSequence* seq = CCSequence::create(CCDelayTime::create(i*delay),
CCCallFuncND::create( this, callfuncND_selector(OverWorldView::setString), (void*)x ),
NULL);
this->runAction(seq);
}
回调功能:
void OverWorldView::setString(void* x) {
std::cout << (const char*)x << "code2" << std::endl;
label1->setString( (const char*)x );
}
我正在使用cocos2dx 2.1.4
答案 0 :(得分:2)
看起来您没有正确使用API。
文档says您需要使用SEL_CallFuncND
类型的回调,receives two arguments而不是一个。{3}}。
为了方便每个人,callfuncND_selector
is a macro that hides a static_cast,或者甚至可能是C风格的演员(无法在线找到其他API版本),它允许您将任何内容用作回调而不会出现任何编译错误。纯粹的快乐。
答案 1 :(得分:0)
这甚至不会编译,因为你将const指针传递给接受非const指针的函数。如果你不能改变回调的类型,那么不要传递字符串文字,而是传递一个字符数组。
char buffer[100];
callback(buffer); //buffer decays to char* which is implicitly converted to void*
如果您可以更改回调的类型,则将参数修改为const void*
。