函式回傳型別為 char*,但 return 後面跟的是 DWORD 變數,編譯器報錯「無法從 DWORD 轉換為 char」及「返回值類型與函數類型不匹配」。
DWORD 是 32 位元無號整數,char* 是字元指標,兩者型別完全不相容。DWORD 或 uint32_t。// 錯誤示範
char* GetErrorMsg(DWORD code) { return code; }
// 正確示範 1:靜態緩衝區(非執行緒安全)
char* GetErrorMsg(DWORD code) {
static char buf[256];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, code, 0, buf, 256, NULL);
return buf;
}
// 正確示範 2:呼叫者提供緩衝區(推薦)
BOOL GetErrorMsg(DWORD code, char* buf, size_t len) {
return FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, code, 0, buf, (DWORD)len, NULL);
}
static_cast、reinterpret_cast 明確表達轉換意圖,避免隱式轉換陷阱。型別系統是 C/C++ 靜態檢查的第一道防線,遇到「無法轉換」錯誤時,先釐清「我要回傳什麼」,再調整函式簽名與實作,切勿強制轉型掩蓋問題。