'default argument' : 无法从'const char [1]'转换为'const wchar_t *'

'default argument' : cannot convert from 'const char [1]' to 'const wchar_t *'

本文关键字:const 转换 wchar char default argument      更新时间:2023-10-16

我正在尝试编译一些我在网上找到的旧游戏SRC这是代码

bool LoadFromINI(std::wstring const& strINIFileName = _T("./Local.ini"), char const* szDefaultLocale = "");
bool LoadFromINB(std::wstring const& strINBFileName, wchar_t const* szDefaultLocale = _T(""));

C:......CodeCel_Convert_SourceCosmosincludeBM/LocalMgr.h(60): error C2440: 'default argument' : cannot convert from 'const char [1]' to 'const wchar_t *'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>C:......CodeCel_Convert_SourceCosmosincludeBM/LocalMgr.h(60): error C2548: 'LOCAL_MGR::CLocal::LoadFromINB' : missing default parameter for parameter 2
1>C:......CodeCel_Convert_SourceCosmosincludeBM/LocalMgr.h(59): error C2440: 'default argument' : cannot convert from 'const char [12]' to 'const std::wstring &'
1>          Reason: cannot convert from 'const char [12]' to 'const std::wstring'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous
1>C:......CodeCel_Convert_SourceCosmosincludeBM/LocalMgr.h(103): fatal error C1903: unable to recover from previous error(s); stopping compilation

又一个错误:代码:

      _tcscpy_s(m_kDBName,30, (wchar_t const*)in_strDBName);
输出:

'errno_t strcpy_s(char *,rsize_t,const char *)':无法将参数3从'const wchar_t *'转换为'const char *'1>所指向的类型不相关;转换需要reinterpret_cast、c风格强制转换或函数风格强制转换

_T("blah")改为L"blah"

_T为宏,不做任何操作或添加L

或者,对_TTCHAR使用wchar选项编译项目

只有当您的项目使用定义的UNICODE预处理器符号进行编译时,_T("str")才扩展为L"str"。在你的情况下,它似乎不是,所以_T()什么也不做。将函数声明更改为

bool LoadFromINI(std::wstring const& strINIFileName = L"./Local.ini", wchar_t const* szDefaultLocale = "");
bool LoadFromINB(std::wstring const& strINBFileName, wchar_t const* szDefaultLocale = L"");

或者如果你真的,真的必须支持_T()TCHAR的东西,把它们改成

bool LoadFromINI(std::basic_string<TCHAR> const& strINIFileName = _T("./Local.ini"), TCHAR const* szDefaultLocale = "");
bool LoadFromINB(std::basic_string<TCHAR> const& strINBFileName, TCHAR const* szDefaultLocale = _T(""));

现在第一个参数将是std::stringstd::wstring取决于是否定义了UNICODE