//现象:
//使用C++标准库<string>字符串 当使用string::to_string(int)要将int转成string时提示重载函数调用冲突,
//即使强转string::to_string((int) myintnum)也不好使
//这是VC++的错误,IT屋有篇文章详细说明了情况[添加链接描述](http://www.it1352.com/468233.html)
//另[添加链接描述](https://blog.csdn.net/ganxinjiang/article/details/7338656)还给出了自己的解决办法
// Cto_sting_intDlg 消息处理程序
BOOL Cto_sting_intDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
//Debugin
std::string mystring = "";
int nCount = 99;
mystring = std::to_string(static_cast<long long>(nCount));
LPCTSTR mystr = (LPCTSTR)mystring.c_str(); //当项目采用Unicode字符集时 这里LPCTSTR就是wchar_t* 当用char*赋给wchar_t*后wchar_t*会以双字节Unicode字符去翻译从而得到错误的字符
LPTSTR mystr3 = (LPTSTR)mystring.c_str(); //当项目采用多字节字符集时 编译检测到右值是char* 那左值的LPTSTR或LPCTSTR会相应变化为char*而不是wchar_t* 会正确翻译字符
const char* mystr2 = NULL;
mystr2 = mystring.c_str();
LPCTSTR mystr4 = (LPCTSTR) mystr2; //当项目采用Unicode字符集时 这里LPCTSTR就是wchar_t* 当用char*赋给wchar_t*后wchar_t*会以双字节Unicode字符去翻译从而得到错误的字符串
MYSTATIC.SetWindowText(mystr);
//Debugout
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
VS2010使用<string>的char* std::string::to_string(int|unsigned int|long|long long)等重载类型时无法判别的错误
最新推荐文章于 2022-01-16 11:21:19 发布