我想将NULL传递给以下函数的第4个参数:
bool CCMenuItemToggle::initWithTarget(CCObject* target, SEL_MenuHandler selector, CCMenuItem* item, **va_list args**);
像这样:
CCMenuItemToggle::initWithTarget(this, menu_selector(GOSound::toggleButtonCallback), NULL, NULL);
我在XCode(clang3.1)中构建它时没关系。但是当我将代码移植到android ndk(g ++ 4.7)时,它无法编译:
没有可行的从'int'转换为'va_list'(又名'__builtin_va_list')
我该怎么处理呢?
我假设如果你只使用空的va_list
而不是NULL,你的代码将会起作用。
CCMenuItemToggle::initWithTarget( this, menu_selector(GOSound::toggleButtonCallback)
, NULL, va_list() );
编辑:也许这个替代解决方案适用于两个编译器。
va_list empty_va_list = va_list();
CCMenuItemToggle::initWithTarget( this, menu_selector(GOSound::toggleButtonCallback)
, NULL, empty_va_list );
我看到这个问题得到了解答,但这不是标准问题。以下代码将通过Visual Studio中的运行时错误;但是,它适用于g ++。
va_list empty_va_list;
CCMenuItemToggle::initWithTarget( this, menu_selector(GOSound::toggleButtonCallback), NULL, empty_va_list );
更好的解决方案是创建一对辅助函数来构造一个空的va_list。
va_list CCMenuItemToggle::createEmptyVa_list()
{
return doCreateEmptyVa_list(0);
}
va_list CCMenuItemToggle::doCreateEmptyVa_list(int i,...)
{
va_list vl;
va_start(vl,i);
return vl;
}
将doCreateEmptyVa_list设为私有,然后在调用函数调用时
CCMenuItemToggle::initWithTarget( this, menu_selector(GOSound::toggleButtonCallback), NULL, CreateEmptyVa_list() );
您不能将NULL
作为函数的第四个参数传递。该函数需要va_list
参数。一般情况下,NULL
不是va_list
对象的有效初始值。所以,你的问题的答案是:这是不可能的。
你应该如何处理它取决于你想要做什么。