面對滿屏紅字,新手最崩潰。本文精選 20 個最高頻編譯/連結錯誤,附帶中文解讀、常見成因與修正範例,建議加入書籤。
| 錯誤碼 | 中文含義 | 典型原因 | 修正範例 |
|---|---|---|---|
| C1010 | 尋找預編譯標頭時遇到檔案尾 | 缺少 #include "stdafx.h" | 在 .cpp 第一行加入 #include "stdafx.h" |
| C1083 | 無法開啟包含檔案 | 路徑錯誤、檔案不存在、專案包含目錄未設定 | 專案屬性 → C/C++ → Additional Include Directories 加入正確路徑 |
| C2011 | 類型重複定義 | 頭文件重複包含、缺少防衛巨集 | 頭文件加 #pragma once 或 #ifndef _MYCLASS_H_ ... |
| C2018 | 無法識別字元 0xa3 | 原始碼含中文字元或全形標點(註解除外) | 移除程式碼中的中文;字串常量改用 _T("中文") 或資源檔 |
| C2057 | 需要常數運算式 | switch 的 case 使用變數 | case 後必須是編譯期常數(const int、enum、巨集) |
| C2065 | 未宣告的識別碼 | 拼寫錯誤、缺少頭文件、作用域錯誤 | 檢查拼寫、補齊 #include、確認命名空間 |
| C2082 | 函式參數在函式體內重定義 | 區域變數與參數同名 | 重新命名區區變數 |
| C2143 | 語法錯誤:'{' 前缺少 ';' | 漏寫分號、巨集展開異常 | 檢查前一行結尾;若用巨集請用 /P 預處理輸出排查 |
| C2146 | 語法錯誤:識別碼前缺少 ';' | 同上,常見於類別定義後漏分號 | class A {}; 結尾必須有分號 |
| C2196 | case 值重複 | switch 多個 case 同值 | 合併或修正重複值 |
| C2509 | 成員函式未在類別中宣告 | .cpp 實作函式但 .h 缺少宣告 | 在類別定義加入對應宣告 |
| C2511 | 找不到重載成員函式 | 參數列表與宣告不符(const、引用、指標差異) | 對齊宣告與定義的參數簽名 |
| C2555 | 覆寫虛擬函式僅回傳型別/呼叫約定不同 | 衍生類虛擬函式回傳型別與基類不同 | 回傳型別必須協變或完全相同 |
| C2660 | 函式不接受該數量參數 | 呼叫時參數個數錯誤 | 查閱函式原型補齊參數 |
| C4035 (W) | 函式無回傳值 | 非 void 函式缺少 return | 所有路徑必須 return 值 |
| C4553 (W) | '==' 無效果,是否為 '='? | 條件判斷寫成賦值 | 改為 if (a == b) 或 if ((a = b) != 0) |
| C4700 (W) | 區域變數未初始化即使用 | 宣告未賦值 | 宣告時初始化:int i = 0; |
| C4716 | 函式必須回傳值 | 非 void 函式漏寫 return | 補上 return 語句 |
| LNK1168 | 無法開啟 .exe 寫入 | 程式仍在執行、防毒軟體攔截 | 關閉舊程式、排除輸出目錄掃描 |
| LNK2001 | 未解析的外部符號 | 見上篇《LNK2001 八大元兇》 | 補上遺漏定義、修正庫鏈接順序、統一 Runtime Library |
function call missing argument list → 呼叫函式忘加括號,如 func 應為 func()member function definition looks like a ctor... → 建構函式名稱與類別名不符unexpected end of file while looking for precompiled header → 同 C1010,通常是專案設定預編譯標頭但 .cpp 未包含錯誤碼是編譯器給你的精準提示,而非懲罰。熟記高頻錯誤模式,配合「最小重現專案」排查思維,除錯效率可提升 80% 以上。下次見到紅字,深呼吸,查表,定位,修復——從容不迫。