在VS开发环境下,建立的MFC工程。
百度知道上有人说
把#include < iostream>
using namespace std;
改为
#include<iostream.h>
但我试了会报错:
error C1083: Cannot open include file: ‘iostream.h’: No such file or directory
看了CSDN上一篇博客,有点启发:
定义了一个CString 对象m_strInputLine 在消息处理函数中:
void CTextView::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
m_strInputLine += nChar;
}编译时出错 说重载操作符出错,提示信息:error C2593: “operator +=”不明确
解答如下:
CString,在vs2008中,为unicode,wchar_t基类型。
而CString,在vc6.0中为ansi,char基类型。所以在vs2008: m_strInputLine是wchar_t。
应将UINT nChar转换成wchar_t。
在处理键盘输入读取按键时:
void CWriterView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{ //TODO: Add your message handler code here and/or call default
CWriterDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData += (char)nChar;
Invalidate(); CView::OnChar(nChar, nRepCnt, nFlags);
}
编译时出现“operator +=”不明确,也就是pDoc->StringData += nChar;
改正方法:
pDoc->StringData+=(char)nChar,因为系统里面存在一个wchar_t的类型,所以如果支持了这个类型的话,从unsigned nt转换到wchar_t和char的等级都是标准转换,所以编译器无法判断到底应该转换到哪一个,故而导致了这个问题。
我原来的代码是在vc6.0运行成功的,在vs2010报错。应该是不同编译器默认编码不同导致的。
因为我同时还报错:
error C2664: ‘strtol’ : cannot convert parameter 1 from ‘CString’ to 'const char
不能将参数 1 从“CString”转换为“const char *”;
(error C2664: “atoi”: 不能将参数 1 从“CString”转换为“const char *”))
在vc6.0下用CString str;num = atoi(str);就可以顺利取到num;
但是同样代码拿到vs2008就报错,error C2664: “atoi”: 不能将参数 1 从“CString”转换为“const char ”;
于是把CString 强制转换为char,num = atoi((LPSTR)(LPCTSTR)str);
编译不报错,运行成功。但是后面发现,本来str=“123”,num应该是123,结果却只是1,试了其他的都是只取最前面一位。
后面百度中无意发现,原来是,vc6.0默认是ansi编码,所以atoi可以直接用,结果也正确;但是VS2008默认的编码方式是Unicode,Unicode下不能用atoi,而要使用_wtoi 也可以直接使用_ttoi,它在 ANSI 编码系统中被编译成atoi(),而在 Unicode 编码系统中编译成_wtoi()。或者把vs改成ansi编码也行。
num = _ttoi(str);(_ttoi类似于_T,随着编码方式会改变)。
VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode字符集你要加_T("")或L"",你也可以“工程-属性-修改字符集”。
我在使用过程中的时候是用了定义了一个CString 对象space
但是我在使用这个方法是
m_space=m_space+" ";
编译出错:
error C2593: “operator =”不明确 1>
原因:是因为两个的编码类型不同,
CString,在vs2010中,为unicode,wchar_t基类型。
而CString,在vc6.0中为ansi,char基类型。
所以我们必须强制类型转换
吧char型改为wchar_t类型;
1:
CString strTemp; strTemp.Format("%d", nChar); m_strLine += strTemp;
2:
m_space=m_space+(wchar_t)" ";