【问题标题】:Redefinition of default argument重新定义默认参数
【发布时间】:2016-07-25 03:34:24
【问题描述】:

我在编译一些代码时遇到“重新定义默认参数”的错误。这是引发错误的行:

bool wCommandDistributor::initialise (const bool server = true, const short ncmds=0,
                byte (*cmds)[CMD_MAX_RECLEN] = (byte (*)[CMD_MAX_RECLEN])0)

我是否可以重写代码以解决错误?这不是我写的代码。我正在帮助重写代码,它是用 C++ 编写的。

提前致谢。

【问题讨论】:

    标签: c++ default-arguments


    【解决方案1】:

    编译器说明了一切,您正在重新定义 initialise 的默认参数(即使它们可能相同)。

    默认参数可能已经在函数声明中定义。您不需要在函数定义中重新定义它们,因此您应该删除它们。

    但只有那些已经在声明中定义的,可能有些没有在声明中定义,只是在定义中。在这种情况下,您应该自然而然地离开它们。

    【讨论】:

    • 我理解删除声明:const bool server = true, const short ncmds=0 并在另一个地方定义它们。但是,我的问题在于:byte (*cmds)[CMD_MAX_RECLEN] = (byte (*)[CMD_MAX_RECLEN])0.
    • @user1744424 没看懂问题,去掉默认参数声明= true= 0(byte(*)[CMD_MAX_RECLEN])0
    • 是的,但在我删除声明后,我如何重新声明 byte (*cmds)[CMD_MAX_RECLEN] = (byte (*)[CMD_MAX_RECLEN])0,因为只是声明该声明会给我一个错误。
    • @user1744424 为什么要重新声明?
    • @user1744424 我真的很困惑,抱歉。您不需要为定义指定默认参数,因为您已经在声明中指定了它们 - initialise(const bool server, const short ncmds, byte(*cmds)[CMD_MAX_RECLEN] 您能解释一下您遇到的具体问题吗?
    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 2012-12-21
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多