我希望有人可以帮我解释在Visual Studio 2012中处理CString的事情。我在VS2012中创建一个新的MFC应用程序,在表单中添加一个按钮,然后将以下代码添加到该按钮的onclick 。
CString Str1;
CString Str2;
Str1 = "Apple";
Str2 = "Pear";
Str1+= Str2;
AfxMessageBox(Str1);
int K = 0;
K = Str1.Find("Pear");
Str1.Format("%d", K);
Str1.TrimLeft();
AfxMessageBox(Str1);
在构建解决方案之前,我发现它不喜欢Str1.Find
和Str1.Format
。它给出了这个错误......
error C2664: 'int ATL::CStringT<BaseType,StringTraits>::Find(wchar_t,int) throw() const' :
cannot convert parameter 1 from 'const char [5]' to 'wchar_t'
with
[
BaseType=wchar_t,
StringTraits=StrTraitMFC_DLL<wchar_t>
]
There is no context in which this conversion is possible
然后我在Visual C ++ 6.0中创建了一个MFC应用程序,在表单中添加了一个按钮,并在按钮的onclick中添加了相同的代码。然后我使用VS2012打开了这个项目,并进行了必要的更改以使其兼容。现在,代码在Visual Studio 2012中运行得非常好。我已经得出结论(可能不正确),当Visual Studio 2012打开Visual C ++ 6.0项目并进行更改时,它会添加类似于另一个文件或#include语句的内容。我比较了这两个项目,我不能为我的生活弄清楚发生了什么。任何人都可以解释为什么这个代码在Visual Studio 2012中不起作用,但是如果我用Visual Studio 2012打开Visual C ++ 6.0项目会有效吗?
答案 0 :(得分:0)
在您的VC6项目中,您可能不使用Unicode,因此它适用于“Pear”,“Apple”等。 更改字符串,以便它们使用TEXT()宏。例如:
Str1.Find(TEXT("Pear"));