2011-01-06 79 views
0

我有一个程序,我需要使用Format();函数将字符串文字和int整合到一个CString变量中。我试图这样做的几种不同的方式,对他们的代码是在这里:在C++中转换类型时出错

// 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:“无效ATL :: CStringT ::格式(常量为wchar_t *,...)” :无法将参数1从'const char [33]'转换为'const wchar_t *'

对于第二个,没有错误,但文本以中文字符显示。

第三个返回错误C2440:'的static_cast:不能从 '为const char [33]' 到 'wchar_t的'

任何想法转换为转换CStrings到wchar_t的* S?
感谢

+0

这是超级nitpicky,但从技术上讲,你不应该命名变量名称的下划线后跟大写字母。这些名称由实现保留,无论他们感觉如何(包括任意性的恶意宏)。只是想我会提到这是一个供参考。 – templatetypedef 2011-01-06 06:32:22

回答

1

的问题是,你正在执行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的东西。

+0

谢谢! L“”语法起作用! – 2011-01-07 03:01:41

2

嗯,这是不完全清楚你想定位的目标字符串类型,但这里是我会做:

_CString.Format(_T("%d"), _int); 

尝试输入蒙上了多字节串到Unicode字符串可能会编译,但是它要求很麻烦,因为它仍然是一个多字节字符串。你需要转换整个字符串,而不是仅仅转换它,如果这是你想要的。