使用默认参数调用函数时出现编译错误

ksh*_*noy -1 c++

调用使用默认参数的函数时出现错误。

这两个文件是cache.cppcache.h

我用来编译的命令是

g++ -c cache.cpp
Run Code Online (Sandbox Code Playgroud)

错误是:

cache.cpp: In member function ‘bool mem::read(long unsigned int)’:
cache.cpp:205:88: error: no matching function for call to ‘vcache::swap(long unsigned int&, bool&)’
cache.h:97:23: note: candidate is: long unsigned int vcache::swap(long unsigned int, bool, int)
cache.cpp: In member function ‘void mem::write(long unsigned int)’:
cache.cpp:367:92: error: no matching function for call to ‘vcache::swap(long unsigned int&, bool&)’
cache.h:97:23: note: candidate is: long unsigned int vcache::swap(long unsigned int, bool, int)
Run Code Online (Sandbox Code Playgroud)

正如您在第569行上看到的,其中已定义函数vcache :: swap的地方,我为第3个参数提供了默认值。当我在函数调用期间未指定第三个参数时,就会出现问题。如果我通过显式指定第3个参数来运行它,则它将正确编译。

无法理解为什么会这样。

Ker*_* SB 6

这不是默认参数的工作方式。默认参数必须放在声明中,而不是定义中:

// foo.h
void foo(int, int, int = 5);   // default values here

// foo.cpp
void foo(int a, int b, int c)
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

想一想:每个想要使用该功能的TU都必须知道默认值。这仅在函数的每个用户都必须看到的声明中才有意义。