【问题标题】:Function does not take X arguments, function with default arguments [duplicate]函数不采用 X 参数,具有默认参数的函数 [重复]
【发布时间】:2020-02-09 18:07:44
【问题描述】:

我有一个函数声明

int checkWinsockError(int errorCode, const char *errorType, bool getError, int WSAAPI cleanupFunc(), struct addrinfo *addrToFree, SOCKET *socketToClose, bool sockError);

还有一个函数定义。

int checkWinsockError(int errorCode, const char *errorType, bool getError=false, int WSAAPI cleanupFunc()=nullptr, struct addrinfo *addrToFree=nullptr, SOCKET *socketToClose=nullptr, bool sockError=false) {
      // error handling code
}

当我调用这个函数时,

checkWinsockError(10000, "error");

我收到错误“checkWinsockError”:函数不接受 2 个参数。这个函数调用

checkWinsockError(10000, "error", false);

覆盖第一个默认参数会导致错误“checkWinsockError”:函数不采用 3 个参数。这种情况一直持续到我用这样的函数调用覆盖最后一个默认参数 sockError。

checkWinsockError(10000, "error", false, nullptr, nullptr, nullptr, false);

我只是在将 sockError 添加到参数列表后才开始遇到此错误。当有默认参数时,为什么编译器强制我为此参数传递一个值?我正在使用 Visual Studio 2017 和 Winsock 库。

【问题讨论】:

标签: c++ winsock default-arguments


【解决方案1】:

在函数调用点,编译器只看到没有默认参数的函数声明。

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多