C++ 从空洞中提取铸件类型*

C++ 从空洞中提取铸件类型*,c++,cocos2d-x,C++,Cocos2d X,据我所知,这应该是可行的: const char* x = "x"; std::cout << x << std::endl; const char*x=“x”; std::cout这甚至不会编译,因为您将常量指针传递给接受非常量指针的函数。如果无法更改回调的类型,则传递字符数组,而不是传递字符串文字 char buffer[100]; callback(buffer); //buffer decays to char* which is implicitly con

据我所知,这应该是可行的:

const char* x = "x";
std::cout << x << std::endl;
const char*x=“x”;

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

char buffer[100];

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

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

,则看起来您没有正确使用API

您需要使用
SEL_CallFuncND
类型回调的文档,而不是一个


为方便大家起见,
callfuncND\u选择器
,甚至可能是一个C风格的强制转换(在网上找不到其他API版本),它允许您使用任何东西作为回调,而不会出现任何编译错误。纯粹的快乐。

你怎么称呼帕萨斯沃德?类似于passAsVoid(“x”)
?我可以问一下为什么需要这样做吗?在C++中,一般来说,不需要这样做。我甚至想说,除非您处理的是C API,否则正确的方法是根本不这样做。我使用的API只接受void*types=s
std::couttry
void overworldwiew::setString(CCNode*,void*x){/*…*/}
,仅此更改(无包装器)。OP使用的版本使用C样式转换:
\define callfuncND\u selector(\u selector)(SEL\u callfuncND)(&\u selector)
m(
static\u cast
将在编译时捕获该错误(新版本3.引入了
static\u cast
)。感谢所有到目前为止的帮助,我使用这个精确的callbackselector传递向量作为唯一的参数,它以前是有效的,我不知道为什么这次不行,这个解决方案似乎有效,但我的代码中仍然有一些错误,我必须首先解决!“在网上找不到其他API版本”是的,我下载了这个框架(cocos2d-x2.1.4)并查看了代码,这就是我引用的地方。对不起,现在我必须运行的所有人,我将在几个小时后再次更新此问题。
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 );
}
char buffer[100];

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