【发布时间】:2013-08-03 21:03:53
【问题描述】:
据我了解,这应该可行:
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
【问题讨论】:
-
你怎么称呼
passAsVoid?passAsVoid("x")之类的东西? -
我能问一下为什么你需要这样做吗?在 C++ 中,您通常不需要这样做。我什至会说,除非您正在处理 C API,否则正确的方法是根本不这样做。
-
我使用的 api 只接受 void* types =s
-
std::cout << (const char*)v应该打印字符串。如果您省略演员表,它只会打印指针地址...您确定这是您的实际代码吗? -
试试
void OverWorldView::setString(CCNode*, void* x) { /*...*/ }.,只是这个改变(没有包装)。