函数不接受 X 参数,函数使用默认参数

Function does not take X arguments, function with default arguments

本文关键字:函数 参数 默认 不接受      更新时间:2023-10-16

我有一个函数声明

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");

我收到错误"检查WinsockError":函数不接受 2 个参数"。此函数调用

checkWinsockError(10000, "error", false);

覆盖第一个默认参数会给出错误"checkWinsockError":函数不接受 3 个参数"。这一直持续到我用这样的函数调用覆盖最后一个默认参数 sockError。

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

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

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