7

次の関数の4番目のパラメーターにNULLを渡したい:

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')への実行可能な変換はありません

どのように対処すればよいですか?

4

3 に答える 3

11

va_listNULLの代わりに空を使用するだけでコードが機能すると思います。

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 );
于 2013-03-10T11:42:31.077 に答える
0

この質問には答えられたようですが、標準ではありません。次のコードは、VisualStudioのランタイムエラーを通過します。ただし、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() );
于 2014-04-29T22:22:32.893 に答える
0

NULL関数の4番目の引数として渡すことはできません。その関数にはva_list引数が必要です。一般に、オブジェクトNULLの有効な初期化子ではありません。va_listだから、あなたの質問への答えは:それは不可能です。

どのように対処すべきかは、何をしようとしているかによって異なります。

于 2014-04-29T23:34:12.970 に答える