当我调用使用默认参数的函数时,我遇到了错误。
我用来编译的命令是
g++ -c cache.cpp
,错误是:
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)
正如你在第569行所看到的那样定义了函数vcache :: swap,我为第3个参数提供了一个默认值。 当我在函数调用期间没有指定第三个参数时会出现问题。如果我通过显式指定第三个参数来运行它,它会正确编译。
我无法理解为什么会这样。
答案 0 :(得分:4)
这不是默认参数的工作原理。默认参数必须在声明中,而不是定义:
// foo.h
void foo(int, int, int = 5); // default values here
// foo.cpp
void foo(int a, int b, int c)
{
// ...
}
想一想:每个想要使用该功能的TU都必须知道默认值。这只在声明中有意义,函数的每个用户都必须看到它。