在 C++ 中转换类型时出错
Posted
技术标签:
【中文标题】在 C++ 中转换类型时出错【英文标题】:Error converting types in C++ 【发布时间】:2011-06-04 10:25:29 【问题描述】:我有一个程序需要使用 Format();将字符串文字和 int 组合成 CString 变量的函数。我尝试了几种不同的方法,它们的代码在这里:
// declare variables used
CString _CString;
int _int;
// try to use format function with string literal
_CString.Format("text",_int);
// try to use format function with C-Style cast
_CString.Format((wchar_t)"text",_int);
// try to use format function with static_cast
_CString.Format(static_cast<wchar_t>("text"),_int);
第一个返回错误 C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [33]' to 'const wchar_t *'
第二个,没有错误,但文字显示为汉字。
第三个返回错误 C2440: 'static_cast' : cannot convert from 'const char [33]' to 'wchar_t'
关于将 CStrings 转换为 wchar_t *s 的任何想法? 谢谢
【问题讨论】:
这太挑剔了,但从技术上讲,您不应该使用带有下划线后跟大写字母的名称来命名变量。这些名称由实现保留用于他们感觉的任何用途(包括任意的邪恶宏)。只是想我会提到这个作为仅供参考。 【参考方案1】:嗯,目前尚不完全清楚您要定位哪种字符串类型,但这是我要做的:
_CString.Format(_T("%d"), _int);
尝试将多字节字符串类型转换为 Unicode 字符串可能会编译,但它会自找麻烦,因为它仍然是多字节字符串。如果你想要的话,你需要转换整个字符串,而不仅仅是类型转换。
【讨论】:
【参考方案2】:问题是您正在执行 UNICODE 构建(这很好),所以
_CString.Format();
函数我期望第一个参数是一个宽字符串。您需要使用L""
语法来形成宽字符串文字:
_CString.Format(L"text",_int);
当然,您需要一个说明符才能真正将 int
变量格式化为 CString:
_CString.Format(L"text: %d",_int);
如果包含 tchar.h
标头,则可以使用 Microsoft 的宏将字符串文字设为宽字符或常规旧字符(也称为 ANSI),具体取决于您是否构建 UNICODE:
_CString.Format(_T("text: %d)",_int);
但我会说,除非您打算支持需要 ANSI 支持的旧版东西,否则我可能不会打扰 tchar.h
的东西。
【讨论】:
【参考方案3】:试试 mbstowcs 函数。 http://msdn.microsoft.com/en-us/library/ms235631(v=vs.80).aspx
【讨论】:
以上是关于在 C++ 中转换类型时出错的主要内容,如果未能解决你的问题,请参考以下文章
从数据类型 varchar 转换为 numeric 时出错.