首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2013 MFC CFile::Open 編譯錯誤:字符串字面量需 _T() 宏包裹

     編輯:程式設計綜合問答

錯誤信息

no instance of overloaded function "CFile::Open" matches the argument list
argument types are: (const char[15], CFile::OpenFlags)

原因

VS2013 預設啟用 Unicode 字符集(UNICODE、_UNICODE 宏定義),CFile::Open 參數類型為 LPCTSTR(即 const wchar_t*),無法隱式接受 const char* 字面量。

解決方案


// 錯誤
if (!File.Open("e:\\8bitcol.bmp", CFile::modeRead)) return;

// 正確:使用 _T() 或 TEXT() 宏自動適配字符集
if (!File.Open(_T("e:\\8bitcol.bmp"), CFile::modeRead)) return;
// 或顯式寬字符
if (!File.Open(L"e:\\8bitcol.bmp", CFile::modeRead)) return;

最佳實踐

  • 所有字符串字面量統一用 _T("...") 包裹,確保 Debug/Release、Unicode/MBCS 兼容。
  • 項目屬性 → 字符集 設置為「使用 Unicode 字符集」(現代 Windows 開發標準)。
  • 避免混用 char* 與 TCHAR*,統一使用 CString 或 std::wstring。

舉一反三

同理適用於所有 MFC/Win32 API 接受 LPCTSTR 的函數:CreateFile、MessageBox、SetWindowText 等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved