调用使用默认参数的函数时出现错误。
我用来编译的命令是
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个参数来运行它,则它将正确编译。
无法理解为什么会这样。
这不是默认参数的工作方式。默认参数必须放在声明中,而不是定义中:
// 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都必须知道默认值。这仅在函数的每个用户都必须看到的声明中才有意义。
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |