跳转到内容

title=重载函数 FUNCTION_NAME 调用不明确

来自 Wikibooks,开放的书籍,开放的世界

函数调用中的参数与任何函数声明不匹配

[编辑 | 编辑源代码]

例如,一个名为“foo”的函数在 main 函数内部被调用,但其参数与当前存在的任何“foo”函数实现不完全匹配。

void foo(int x);
void foo(double x);

int main () {
   long x = 5000;
   foo(x);
   ...

解决方案 1: 将参数强制转换为与某个声明匹配

int main () {
   long x = 5000;
   foo((int)x);

解决方案 2: 创建一个新的重载版本,使其与调用函数的参数匹配

void foo(int x);
void foo(double x);
void foo(long x);

int main () {
   long x = 5000;
   foo(x);

相同函数被定义多次

[编辑 | 编辑源代码]

解决方案 1: 检查是否有拼写错误或重复的函数定义/声明

解决方案 2: 确保没有使用标准库中定义的函数名称

template <typename T>
void swap(T &a, T &b) {  // error, "swap" is defined by the C++ standard library
   T tmp = a;
   a = b;
   b = tmp;
}

// Possible Fix
template <typename T>
void Swap(T &a, T &b) {  // Capitalized the first letter
   T tmp = a;
   a = b;
   b = tmp;
}
  • 此消息出现在 GCC 版本 3.2.3、4.5.1 中
华夏公益教科书