跳轉到內容

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 中
華夏公益教科書