4

它只是给了我“延迟的重新声明”。我怎样才能改变这个,如果延迟没有传递给的调用doSay(text),延迟应该是1000,但如果它被称为doSay(text, 9000),它应该是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 回答