我有一个函数声明
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 库。