0

据我了解,这应该有效:

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

4

2 回答 2

2

看起来您没有正确使用 API。

文档您需要使用SEL_CallFuncND类型回调,它接收两个参数,而不是一个。

为了大家的方便,callfuncND_selector 是一个隐藏 static_cast 的宏,甚至可能是一个 C 风格的转换(在网上找不到其他 API 版本),它可以让您使用几乎任何东西作为回调,而不会出现任何编译错误。纯粹的喜悦。

于 2013-08-03T21:49:29.167 回答
0

这甚至不会编译,因为您将 const 指针传递给接受非常量指针的函数。如果您无法更改回调的类型,则不要传递字符串文字,而是传递字符数组。

char buffer[100];

callback(buffer); //buffer decays to char* which is implicitly converted to void*

如果您可以更改回调的类型,则将参数修改为const void*.

于 2013-08-03T21:24:37.457 回答