2011-09-26 83 views
-1

当我调用使用默认参数的函数时出现错误。使用默认参数调用函数时发生编译错误

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

我无法理解为什么会发生这种情况。

+1

这是太多的代码要立即理解。尝试缩小问题代码片段并在此处发布。您应该开始查看编译器错误中存在的行号。在这种情况下,再看看'cache.cpp'中的第205和367行以及'cache.h'中的第97行。 –

回答

2

这不是默认参数的工作方式。默认参数已在声明去,而不是定义:

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

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

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

+0

谢谢,这个诀窍:) – kshenoy

相关问题