error C2593: ‘operator =‘ is ambiguous 不明确

在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)" ";

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值