Microsoft C/C++ 編譯器警告 C4400 到 C4599
本節中的文章說明 Microsoft C/C++ 編譯器警告訊息 C4400-C4599。
重要
Visual Studio 編譯器及建置工具可以報告許多類型的錯誤和警告。 發現錯誤或警告後,建置工具可能會假設程式碼意圖並嘗試繼續執行,以便可以同時報告更多問題。 如果工具做的假設有誤,那麼後來的錯誤或警告可能不適用於您的專案。 當您更正專案中的問題時,務必從所報告的第一個錯誤或警告開始進行。 一個修正程式可能會讓許多後續的錯誤消失。
若要取得 Visual Studio 中特定診斷訊息的說明,請在 [輸出] 視窗中選取該訊息,然後按下 F1 鍵。 如果存在,Visual Studio 會開啟該錯誤的文件頁面。 您也可以使用頁面頂端的搜尋工具來尋找有關特定錯誤或警告的文章。 或者,在此頁面上依照目錄中的工具和型別瀏覽錯誤與警告清單。
注意
並非每個 Visual Studio 錯誤或警告都有記載。 在許多情況下,診斷訊息會提供所有可用的資訊。 若您在使用 F1 時登陸此頁面,而且您認為錯誤或警告訊息需要額外的說明,請告訴我們。 您可以使用此頁面上的意見反應按鈕,在 GitHub 提出文件問題。 如果您認為錯誤或警告有誤,或發現工具組有其他問題,請在開發人員社群網站上回報產品問題。 您也可以傳送意見反應,並在 IDE 內輸入錯誤。 在 Visual Studio 中,移至功能表列,然後選擇 [說明] > [傳送意見反應] > [回報問題],或使用 [說明] > [傳送意見反應] > [傳送建議] 提交建議。 已建立某些編譯器錯誤主題,但編譯器未發出,現在會重新導向至此頁面。
您可以在 Microsoft Learn Q&A 論壇中找到針對錯誤和警告的其他協助。 或者,在 Visual Studio C++ 開發人員社群網站上搜尋錯誤或警告號碼。 您也可以搜尋 Stack Overflow 以尋找解決方案。
如需其他說明與社群資源的連結,請參閱 Visual C++ 說明與社群 (部分機器翻譯)。
警告訊息
警告 | 訊息 |
---|---|
編譯器警告 (層級 1) C4600 | #pragma 'macro name':需要一個有效的非空字串 |
編譯器警告 (層級 4) C4400 | 'type':不支援這種類型上的 const/volatile 限定詞 |
編譯器警告 (層級 1) C4401 | 'bitfield':成員是位元欄位 |
編譯器警告 (層級 1) C4402 | 必須使用 PTR 運算子 |
編譯器警告 (層級 1) C4403 | 不合法的 PTR 運算子 |
編譯器警告 (層級 3) C4404 | 已忽略指示詞前的句號 |
編譯器警告 (層級 1) C4405 | 'identifier':識別碼是保留字 |
編譯器警告 (層級 1) C4406 | 已忽略指示詞上的運算元 |
編譯器警告 (層級 1) C4407 | 在不同的成員指標表示法間進行轉換,可能導致編譯器產生不正確的程式碼 |
編譯器警告 (層級 4) C4408 | 匿名 'struct|union' 沒有宣告任何資料成員 |
編譯器警告 (層級 1) C4409 | 指令的大小不合法 |
編譯器警告 (層級 1) C4410 | 運算元的大小不合法 |
編譯器警告 (層級 1) C4411 | 'identifier':符號解析至替代登錄 |
編譯器警告 (層級 2) C4412 | 'function':函式簽章含有類型 'type';C++ 物件在純程式碼與混合或機器碼之間傳遞並不安全。 |
編譯器警告 C4413 | 'classname::member':參考成員已初始化成建構函式結束後就不存在的暫存區 |
編譯器警告 (層級 3) C4414 | 'function':編譯器警告 (層級 3) C4414 |
編譯器警告 (層級 1) C4415 | duplicate __declspec(code_seg('name')) |
編譯器警告 (層級 1) C4416 | __declspec(code_seg(...)) 包含空字串:已忽略 |
編譯器警告 (層級 1) C4417 | 明確樣板具現化不能有 __declspec(code_seg(...)):已忽略 |
編譯器警告 (層級 1) C4418 | __declspec(code_seg(...)) 在型舉上已忽略 |
編譯器警告 (層級 3) C4419 | 'symbol' 在套用至私用 ref 類別 'class'時無效。 |
編譯器警告 (層級 1) C4420 | 'checked_operator':無法使用運算子,使用 'operator' 代替;執行階段檢查可能無法執行 |
編譯器警告 (層級 3) C4421 | 'parameter':可繼續函式上的參考參數可能不安全 |
編譯器警告 (層級 3) C4423 | 'std::bad_alloc':將由類別 ('type') 攔截 (第number 行) |
編譯器警告 (層級 3) C4424 | 'type1' 的攔截之前是 'type2' (第 number 行);如果擲回 'std::bad_alloc',可能發生無法預期的行為 |
編譯器警告 (層級 1) C4425 | 無法將 SAL 註釋套用至 '...' |
編譯器警告 (層級 1) C4426 | 最佳化旗標在加入標頭之後有所變更,可能是因為 #pragma optimize() 所致 |
編譯器警告 (層級 1) C4427 | 'operator':常數相除溢位,此為未定義的行為 |
編譯器警告 (層級 4) C4429 | 可能是不完整或格式不當的通用字元名稱 |
編譯器警告 (錯誤) C4430 | 遺漏類型規範 - 假設為 int。 注意:C++ 不支援 default-int |
編譯器警告 (層級 4) C4431 | 遺漏類型規範 - 假設為 int。 注意: C 已不再支援 default-int |
編譯器警告 (層級 4) C4434 | 靜態建構函式必須有私用存取範圍;已變更為私用存取 |
編譯器警告 (層級 4) C4435 | 'derived_class':/vd2 底下的物件配置將因虛擬基底 'base_class' 而變更 |
編譯器警告 (層級 1) C4436 | 建構函式或解構函式中從虛擬基底 'base_class' 到 'derived_class' 的 dynamic_cast 在使用部分建構的物件時可能會失敗 |
編譯器警告 (層級 4) C4437 | 從虛擬基底 'base_class' 到 'derived_class' 的 dynamic_cast 在某些內容中可能會失敗 |
編譯器警告 C4438 | 'function':無法在 /await:clrcompat 模式中安全地呼叫。 如果 'function' 呼叫到 CLR,可能會導致 CLR 前端損毀 |
編譯器警告 (錯誤) C4439 | 'function':簽章中有受控類型的函式定義必須有 __clrcall 呼叫慣例 |
編譯器警告 (層級 1) C4440 | 呼叫慣例從 'calling_convention1' 重新定義為 'calling_convenction2' 被忽略 |
編譯器警告 (層級 1) C4441 | 'calling_convention1' 的呼叫慣例被忽略;改為使用 'calling_convention2' |
編譯器警告 (層級 1) C4442 | __annotation 引數中有內嵌的 null 結束字元。 值將被截斷。 |
編譯器警告 (層級 1) C4443 | pragma 參數必須為 '0'、'1' 或 '2' |
編譯器警告 (層級 3) C4444 | 'identifier':此內容未實作最上層的 '__unaligned' |
編譯器警告 (層級 1) C4445 | 'function':在 'WinRT|managed' 類型中,虛擬方法不可為私用 |
編譯器警告 (層級 1) C4446 | 'type':無法將成員 'name1' 對應至此類型,因為與類型名稱衝突。 方法已重新命名為 'name2' |
編譯器警告 (層級 1) C4447 | 找到沒有執行緒模型的 'main' 簽章。 考慮使用 'int main(Platform::Array<Platform::String^>^ args)'。 |
編譯器警告 C4448 | 'type1' 沒有在中繼資料中指定的預設介面。 將挑選:'type2',這可能會在執行階段失敗。 |
編譯器警告 C4449 | 'type' 非密封類型應標記為 '[WebHostHidden]' |
編譯器警告 C4450 | 'type1' 應標記為 '[WebHostHidden]',因為它衍生自 'type2' |
編譯器警告 (層級 4) C4451 | 'classname1::member':在這個內容內使用 ref 類別 'classname2::member' 會造成封送處理內容間的物件無效 |
編譯器警告 (層級 1) C4452 | 'identifier':公用類型不能位於全域範圍。 它所在的命名空間必須是輸出 .winmd 檔案名稱的子系。 |
編譯器警告 (層級 1) C4453 | 'type':'[WebHostHidden]' 類型不應該用在不是 '[WebHostHidden]' 之公用類型的已發佈介面上 |
編譯器警告 (層級 1) C4454 | 'function' 是由多於輸入參數數目所多載,卻未指定 [DefaultOverload]。 將挑選 'declaration' 做為預設多載 |
編譯器警告 (層級 1) C4455 | 運算子 'operator':開頭不是底線的常值後置字元識別項已予保留 |
編譯器警告 (層級 4) C4456 | 'identifier' 的宣告會隱藏先前的區域宣告 |
編譯器警告 (層級 4) C4457 | 'identifier' 的宣告會隱藏函式參數 |
編譯器警告 (層級 4) C4458 | 'identifier' 的宣告會隱藏類別成員 |
編譯器警告 (層級 4) C4459 | 'identifier' 的宣告會隱藏全域宣告 |
編譯器警告 (層級 4) C4460 | 'WinRT|managed' 運算子 'operator' 具有以傳址方式傳遞的參數。 'WinRT|managed' 運算子 'operator' 具有來自 C++ 運算子 'cpp_operator' 的不同語意,您是否想要以傳值方式傳遞? |
編譯器警告 (層級 1) C4461 | 'classname':這個類別有完成項 '!finalizer',但沒有解構函式 '~dtor' |
編譯器警告 (層級 1, 錯誤) C4462 | 'type':無法判斷類型的 GUID。 程式可能在執行階段失敗。 |
編譯器警告 (層級 4) C4463 | 溢位;將 'value' 指派給僅可保存從 'min_value' 到 'max_value' 的值之位元欄位 |
編譯器警告 (層級 4) C4464 | 相對 Include 路徑包含 '..' |
編譯器警告 C4466 | 無法執行協同程式堆積省略 |
編譯器警告 (層級 1) C4467 | ATL 屬性用法已被取代 |
編譯器警告 (層級 1) C4468 | [[fallthrough]] 屬性後必須接續 case 標籤或 default 標籤 |
編譯器警告 (層級 1) C4470 | 浮點控制 pragma 在 /clr 下會被忽略 |
編譯器警告 (層級 4) C4471 | 'enumeration':不限範圍的列舉之向前宣告必須含有基礎類型 (假設是 int) |
編譯器警告 (層級 1) C4472 | 'identifier' 是原生列舉:新增存取指定名稱 (private/public) 以便宣告 'WinRT|managed' 列舉 |
編譯器警告 (層級 1) C4473 | 'function':傳遞給格式字串的引數不足 |
編譯器警告 (層級 3) C4474 | 'function':傳遞給格式字串的引數太多 |
編譯器警告 (層級 3) C4475 | 'function':長度修飾元'modifier' 不得與格式指定名稱中的類型欄位字元 'character' 搭配使用 |
編譯器警告 (層級 3) C4476 | 'function':格式指定名稱中有未知的類型欄位字元 'character' |
編譯器警告 (層級 1) C4477 | 'function':格式字串 'string' 需要類型 'type' 的引數,但 variadic 引數 number 的類型為 'type' |
編譯器警告 (層級 1) C4478 | 'function':同一格式字串中不得同時有混合位置與非位置的預留位置 |
編譯器警告 (錯誤) C4480 | 使用了非標準的擴充:指定列舉 'enumeration' 的基礎類型 |
編譯器警告 (層級 4) C4481 | 使用了非標準的擴充:覆寫指定名稱 'keyword' |
編譯器警告 C4482 | 使用了非標準的擴充:在限定名稱中使用列舉 'enumeration' |
編譯器警告 (層級 1, 錯誤) C4483 | 語法錯誤: 必須是 C++ 關鍵字 |
編譯器警告 (錯誤) C4484 | 'override_function': 符合基底 ref 類別方法 'base_class_function',但是未標記為 'virtual'、'new' 或 'override';假設為 'new' (而非 'virtual') |
編譯器警告 (錯誤) C4485 | 'override_function': 符合基底 ref 類別方法 'base_class_function',但是未標記為 'new' 或 'override';假設為 'new' (和 'virtual') |
編譯器警告 (層級 1) C4486 | 'function': ref 類別或實值類別的私用虛擬方法應該標記為 'sealed' |
編譯器警告 (層級 4) C4487 | 'derived_class_function':符合繼承的非虛擬方法 'base_class_function',但未明確標示為 'new' |
編譯器警告 (層級 1) C4488 | 'function': 需要 'keyword' 關鍵詞來實作介面方法 'interface_method' |
編譯器警告 (層級 1) C4489 | 'specifier':不允許出現在介面方法 'method' 上;覆寫指定名稱只允許出現在 ref 類別和實值類別方法上 |
編譯器警告 (層級 1) C4490 | 'override':覆寫指定名稱使用不當 'function' 與基底 ref 類別方法不符 |
編譯器警告 (層級 1) C4491 | 'name': 有不合法的 IDL 版本格式 |
編譯器警告 (層級 1, 錯誤) C4492 | 'function1': 符合基底 ref 類別方法 'function2,但是未標記為 'override' |
編譯器警告 (層級 3, 錯誤) C4493 | 刪除運算式沒有作用,因為 'type' 的解構函式沒有 'public' 可及性 |
編譯器警告 (層級 1) C4494 | 'function' : 忽略 __declspec(allocator),因為函式傳回的類型不是指標或參考 |
編譯器警告 C4495 | 使用非標準的擴充 '__super': 取代為明確的基底類別名稱 |
編譯器警告 C4496 | 使用非標準擴充 'for each': 取代為 ranged-for 陳述式 |
編譯器警告 C4497 | 使用非標準擴充 'sealed': 取代為 'final' |
編譯器警告 C4498 | 使用非標準的擴充:'extension' |
編譯器警告 (層級 4) C4499 | 'function' : 明確特製化不能有儲存類別 (已忽略) |
編譯器警告 (層級 1) C4502 | 'linkage specification' 必須使用關鍵字 'extern' 且必須在其他指定名稱之前 |
編譯器警告 (層級 1) C4503 | 'identifier':裝飾名稱的長度超出範圍,名稱已截斷 |
編譯器警告 (層級 4) C4505 | 'function': 已移除未參考的區域函式 |
編譯器警告 (層級 1) C4506 | 沒有內嵌函式 'function' 的定義 |
編譯器警告 (層級 1) C4508 | 'function': 函式應傳回值;假定 'void' 傳回類型 |
編譯器警告 C4509 | 使用非標準的擴充: 'function' 使用 SEH 且 'object' 有解構函式 |
編譯器警告 (層級 4) C4510 | 'class': 預設建構函式已隱含已刪除的意思 |
編譯器警告 (層級 3) C4511 | 'class': 複製建構函式已隱含已刪除的意思 |
編譯器警告 (層級 4) C4512 | 'class': 指派運算子已隱含已刪除的意思 |
編譯器警告 (層級 4) C4513 | 'class': 解構函式已隱含已刪除的意思 |
編譯器警告 (層級 4) C4514 | 'function': 已移除未參考的內嵌函式 |
編譯器警告 (層級 4) C4515 | 'namespace': 命名空間使用本身 |
編譯器警告 (層級 4) C4516 | 'class::symbol': 不鼓勵使用存取宣告;建議使用成員 using 宣告代替 |
編譯器警告 (層級 4) C4517 | 不鼓勵使用存取宣告;建議使用成員 using 宣告代替 |
編譯器警告 (層級 1) C4518 | 'specifier':此處未預期儲存類別或類型指定名稱;已忽略 |
編譯器警告 (錯誤) C4519 | 預設的樣板引數只能用於類別樣板 |
編譯器警告 (層級 3) C4521 | 'class': 指定多個複製建構函式 |
編譯器警告 (層級 3) C4522 | 'class': 指定多個指派運算子 |
編譯器警告 (層級 3) C4523 | 'class': 指定了多個解構函式 |
編譯器警告 (層級 1) C4526 | 'function': 靜態成員函式無法覆寫虛擬函式 'virtual function',會忽略覆寫並隱藏虛擬函式 |
編譯器警告 (層級 1) C4530 | 已使用 C++ 例外狀況處理常式,但沒有啟用回溯語意 (Unwind Semantics)。 指定 /EHsc |
編譯器警告 (層級 1) C4531 | Windows CE 上無法使用 C++ 例外狀況處理。 使用結構化例外狀況處理 |
編譯器警告 (層級 1) C4532 | 'continue': 跳出 '__finally/finally' 區塊在終止處理期間有未定義的行為 |
編譯器警告 (層級 1) C4533 | 'variable' 的初始化已由 'goto label' 略過 |
編譯器警告 (層級 3) C4534 | 'constructor' 不會是 'class/struct' 'identifier' 的預設建構函式 (因為預設引數) |
編譯器警告 (層級 3) C4535 | 呼叫 _set_se_translator() 需要 /EHa |
編譯器警告 (層級 4) C4536 | 'typename': 類型名稱超出中繼資料 'character_limit 個字元的限制 |
編譯器警告 (層級 1) C4537 | 'object': '.' 套用至非 UDT 類型 |
編譯器警告 (層級 3) C4538 | 'type':不支援這種類型上的 const/volatile 限定詞 |
編譯器警告 (層級 1) C4540 | 使用了 dynamic_cast 轉換為不可存取或模擬兩可的基底;執行階段測試將會失敗 (由 'type1' 轉換為 'type2') |
編譯器警告 (層級 1) C4541 | 'identifier' 用於具有 /GR- 的多態類型 'type';可能會導致不可預測的行為 |
編譯器警告 (層級 1) C4542 | 略過合併插入文字的產生,無法寫入 filetype 檔案: 'issue': message |
編譯器警告 (層級 3) C4543 | 屬性 'no_injected_text' 隱藏插入的文字 |
編譯器警告 (層級 1) C4544 | 'declaration': 在這個樣板宣告上已忽略的預設樣板引數 |
編譯器警告 (層級 1) C4545 | 逗號之前的運算式判斷值為遺漏引數清單的函式 |
編譯器警告 (層級 1) C4546 | 逗號之前的函式呼叫遺漏引數清單 |
編譯器警告 (層級 1) C4547 | 'operator': 逗號之前的運算子無效;必須是具有副作用的運算子 |
編譯器警告 (層級 1) C4548 | 逗號之前的運算式無效; 必須是具有副作用的運算式 |
編譯器警告 (層級 1) C4549 | 'operator': 逗號之前的運算子無效;您需要 'operator' 嗎? |
編譯器警告 (層級 1) C4550 | 運算式評估為遺漏引數清單的函式 |
編譯器警告 (層級 1) C4551 | 函式呼叫遺漏引數清單 |
編譯器警告 (層級 1) C4552 | 'operator': 運算子無效;必須是具有副作用的運算子 |
編譯器警告 (層級 1) C4553 | 'operator': 運算子無效;您需要 'operator' 嗎? |
編譯器警告 (層級 3) C4554 C4554 | 'operator': 檢查運算子優先順序找出可能發生的錯誤;使用括號釐清順序 |
編譯器警告 (層級 1) C4555 | 運算式無效; 必須是具有副作用的運算式 |
編譯器警告 (層級 1) C4556 | 內部即時引數 'value' 的值超出範圍 'lower_bound - upper_bound' |
編譯器警告 (層級 3) C4557 | '__assume' 包含有效的 'effect' |
編譯器警告 (層級 1) C4558 | 運算元 'value' 的值超出範圍 'lower_bound - upper_bound' |
編譯器警告 (層級 4) C4559 | 'function': 重複定義;該函式取得 __declspec(modifier) |
編譯器警告 (層級 1) C4561 | '__fastcall' 不能配合 '/clr' 選項使用: 將轉換為 '__stdcall' |
編譯器警告 (層級 4) C4562 | 啟用 '/clr' 選項時必須使用完整函式原型: 轉換 '()' 為 '(void)' |
編譯器警告 (層級 4) C4564 | 'class' 'classname' 的方法 'method' 定義了不支援的預設參數 'parameter' |
編譯器警告 (層級 4) C4565 | 'function': 重複定義,這個符號先前是以 __declspec(modifier) 宣告的 |
編譯器警告 (層級 1) C4566 | 由通用字元名稱 'char' 表示的字元,無法在目前的字碼頁 (number) 中表示 |
編譯器警告 (層級 1) C4568 | 'function': 沒有任何成員符合明確覆寫的簽章 |
編譯器警告 (層級 3) C4569 | 'function': 沒有任何成員符合明確覆寫的簽章 |
編譯器警告 (層級 3) C4570 | 'type': 未明確宣告為抽象,但是擁有抽象函式 |
編譯器警告 (層級 4) C4571 | 告知性: catch(...) 語意從 Visual C++ 7.1 開始已經變更,不再攔截結構化例外狀況 (SEH) |
編譯器警告 (層級 1) C4572 | [ParamArray] 屬性在 /clr 之下已被取代,請用 '...' 代替 |
編譯器警告 (層級 1) C4573 | 'lambda function' 的使用需要編譯器擷取 'this',但目前的預設擷取模式不允許擷取它 |
編譯器警告 (層級 4) C4574 | 'Identifier' 定義為 '0':您是指使用 '#if identifier' 嗎? |
編譯器警告 (層級 1) C4575 | '__vectorcall' 不能配合 '/clr' 選項使用: 將轉換為 '__stdcall' |
編譯器警告 (層級 1, 錯誤) C4576 | 小括號內且後接初始設定式清單的類型,不是標準的明確類型轉換語法 |
編譯器警告 (層級 1, 關閉) C4577 | 使用 'noexcept' 時未指定任何例外狀況處理模式;不保證發生例外狀況時能夠加以終止。 指定 /EHsc |
編譯器警告 (層級 1, 錯誤) C4578 | 'abs': 從 'type1' 轉換為 'type2' 時,資料可能會遺失 (您的意思是要呼叫 'function' 還是 #include <cmath>?) |
編譯器警告 (層級 3) C4580 | [attribute] 已被取代;請改為指定 System::Attribute 或 Platform::Metadata 作為基底類別 |
編譯器警告 (層級 1) C4581 | 被取代的行為: '"string"' 已被 'string' 取代以處理屬性 |
編譯器警告 (層級 4) C4582 | 'type': 未隱含呼叫建構函式 |
編譯器警告 (層級 4) C4583 | 'type': 未隱含呼叫解構函式 |
編譯器警告 (層級 1) C4584 | 'class1':基底類別 'class2' 已經是 'class3' 的基底類別 |
編譯器警告 (層級 1, 錯誤) C4585 | 'class': WinRT 'public ref class' 必須是密封的或衍生自現有的非密封類別 |
編譯器警告 (層級 1, 錯誤) C4586 | 'type': 公用類型不能在名稱為 'Windows' 的最上層命名空間中宣告 |
編譯器警告 (層級 1) C4587 | 'anonymous_structure': 行為變更:不再隱含呼叫建構函式 |
編譯器警告 (層級 1) C4588 | 'anonymous_structure': 行為變更:不再隱含呼叫解構函式 |
編譯器警告 (層級 4) C4589 | 抽象類別 'class1' 的解構函式會忽略虛擬基底類別 'class2' 的初始設定式 |
編譯器警告 (層級 1) C4591 | 已超出 'constexpr' 呼叫深度限制數 number (/constexpr:depth<NUMBER>) |
編譯器警告 (層級 3) C4592 | 'function': 'constexpr' 呼叫評估失敗;函式將在執行階段呼叫 |
編譯器警告 (層級 1) C4593 | 'function': 已超出 'constexpr' 呼叫評估步驟限制 'limit';請使用 /constexpr:steps<NUMBER> 來增加限制 |
編譯器警告 (層級 3) C4594 | 'type': 如果擲回例外狀況,將不會隱含呼叫解構函式 |
編譯器警告 (層級 1) C4595 | 'type': 行為變更:如果擲回例外狀況,將不再隱含呼叫解構函式 |
編譯器警告 (層級 4) C4596 | 'identifier':成員宣告中的限定名稱不合法 |
編譯器警告 (錯誤) C4597 | 未定義的行為:offsetof 已套用至虛擬基底成員 |
編譯器警告 (層級 1 和層級 3) C4598 | '#include "header"': 先行編譯標頭中的標頭號碼 number 不符合該位置目前的編譯 |
編譯器警告 (層級 3) C4599 | 'flag path':命令列引數號碼 number 不符合先行編譯標頭 |
另請參閱
C/C++ 編譯器與建置工具錯誤與警告 (部分機器翻譯)
編譯器警告 C4000 到 C5999