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

时间:2011-09-26 00:39:38

标签: c++

当我调用使用默认参数的函数时,我遇到了错误。

这两个文件是cache.cppcache.h

我用来编译的命令是

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个参数提供了一个默认值。 当我在函数调用期间没有指定第三个参数时会出现问题。如果我通过显式指定第三个参数来运行它,它会正确编译。

我无法理解为什么会这样。

1 个答案:

答案 0 :(得分:4)

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

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

// foo.cpp
void foo(int a, int b, int c)
{
  // ...
}

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