在 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++ 中转换类型时出错的主要内容,如果未能解决你的问题,请参考以下文章

将数据类型 nvarchar 转换为数值异常时出错

将数据类型 NVarchar 转换为 int 时出错

从数据类型 varchar 转换为 numeric 时出错.

SQL Server 2012 将数据类型 varchar 转换为数字时出错

编译类型向量类的私有成员时出错 - C++ [重复]

将 nvarchar 转换为数据类型 int 时出错