4

それは私に「遅延の再宣言」を与えるだけです。delay が の呼び出しに渡されない場合doSay(text)、遅延が 1000 になるようにこれを変更するにはどうすればdoSay(text, 9000)よいですか?

これが私が試したものですが、うまくいきませんでした。

uint32_t delay = MINTICKS;
if (parameters > 1) {
    delay = std::max(delay, popNumber(L));
} else {
    uint32_t delay = 1000;
}

コード

int PersonInterface::luaActionSay(lua_State* L)
{
    //doSay(text, <optional> delay)
    int32_t parameters = lua_gettop(L);

    uint32_t delay = MINTICKS;
    if (parameters > 1) {
        delay = std::max(delay, popNumber(L));
    }

    std::string msg(popString(L));

    ScriptEnviroment* env = getScriptEnv();

    Person* person = env->getPerson();
    if(person){
        person->doSay(msg, delay);
    }

    return 0;
}
4

1 に答える 1

8

デフォルトのパラメーターを関数に渡すには、関数宣言で次の構文を使用します。

void foo(int a, int b = 1000);

foo(42);       // calls foo(42, 1000);
foo(42, 9000); 

任意の数のデフォルト パラメータを指定できますが、デフォルト以外のパラメータをデフォルト パラメータの右側に配置することはできないため、これは正しくありません。

void foo(int a, int b = 1000, int c);

しかし、これは

void foo(int a, int b = 1000, int c = 42);

再宣言エラーについては、再度宣言しないでくださいdelay

} else {
  delay = 1000;
}

また

delay = (parameters > 1) ?
        std::max(delay, popNumber(L)) :
        1000;
于 2013-06-14T05:53:53.710 に答える