MFC程序从VC6.0移植到VS2005出现'operator +=' is ambiguous 的错误

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

      一个以前的VC6.0的程序,在VS2005中编译,出现了错误:'operator +=' is ambiguous  

CString  m_strDisplay;
m_strDisplay += (cDigit - IDC_0 + 0x30);

出错位置在第二句话。

    出错原因在于vs2005的编译检查比较严格,需要强制转换格式。

修改为:m_strDisplay += static_cast <char>(cDigit - IDC_0 + 0x30);

编译通过!!!


附录:

C语言中的转换:

1.隐性转换,直接赋值,例如,char  ch;int i=char;由编译器完成

2.显式转换,在变量前面加上类型(type),例如:float f;int i=(int)f

C++中的转换:

   C++继承了c语言的转换,但是这种转换并不是安全和严格的,所以C++添加了四个关键字

static_cast    用于基本的数据类型转换,指针之间的转换

char a ;
int b = static_cast<int>(a);
char c = static_cast<char>(b);
type = static_cast<test_enum>(b);

char* pa = NULL;
int *pb = (int*)pa;
//int *pb = static_cast<int*>(pa);        //error
//pa = static_cast<char*>(pb)           //error
char *pc = (char*)pb;
//char *pc = static_cast<char*>(pb);    //error

void *p = static_cast<void*>(pa);
pb = static_cast<int*>(p);
pc = static_cast<char*>(p);

dynamic_cast

const_static

reinterpret_cast

json error: Use of overloaded operator [] is ambiguous 最近在使用json数组时, 用0做下标有问题(Use of overloaded operator [] is ambiguous), 但用1做下标没有问题, 我也是醉了。 网上到处搜了一下, 发现也有网友遇到。  在此感谢如下内容的原作者:http://www.cnblogs.com/porter/p/3578264.html        // Note: //int x = a[ 阅读详情

相关推荐

Unity版本升级问题总结

1.MagicText升级到2020版本后的bug定位与修复

qq_40286399的博客 3400

==运算符重载 (operator overload) 时几个报错的解决方法

第一次学习用C++ 的运算符重载,记录一下报错的解决方法以及改进过程。 针对vector容器,有一个判断给定元素是否在vector中的函数:std::find(vec.cbegin(), vec.cend(), element); 但这个函数只能用在vector元素为内置类型的时候,如果vector 元素类型为类或者结构体,则需要在类或者结构体中重载 == 运算符。 version1:报错 ...

shaozhenghan的博客 4207

error C2593: 'operator +=' is ambiguous

在编译《VC++深入详解》第五章的程序时,出现 error C2593: 'operator +=' is ambiguous 这个错误,不知道怎么解决,请各位大虾帮帮忙。注:我用的是VS 2008 这个错误是在 m_strLine += nChar; 这个语句中出现的。其中m_strLine是一个CString类型的成员变量,而nChar是一个UINT类型的形参。 CString可以

a514223963的专栏 5195

Swift “ambiguous use of operator '>'”

http://stackoverflow.com/questions/25458548/swift-ambiguous-use-of-operator 3down votefavorite I have just downloaded Xcode6-beta6. I am getting compiler error "ambiguo...

weixin_30339457的博客 737

解决VC6.0中ostringstream类输出__int64类型导致的错误error C2593: 'operator <<' is ambiguous

#includeint main(){    std::ostringstream ss;    ss     __int64 i;    // error C2593: 'operator     ss }以上代码提示错误error C2593: 'operator {    char buf[255]={0};    _i64tot( data, buf,10);    stream     return stream;

小GIS的成长日记 2481

error C2593: 'operator' is ambiguous

在做一道c++习题重载流操作符时,编译器报错: error C2593: ‘operator >>’ is ambiguous 在论坛上找了许久,才发现vc6.0重载流操作符时引用头文件应如下: #include<iostream.h> 相反,使用 #include<iostream> using namespace std; 此时,重载流操作符则会报错: error C2593: ‘operator >>’ is ambiguous 在这个背景下,如果同时想

qq_46097430的博客 2739

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

VS开发环境下,建立的MFC工程。 百度知道上有人说 把#include &amp;lt; iostream&amp;gt; using namespace std; 改为 #include&amp;lt;iostream.h&amp;gt; 但我试了会报错: error C1083: Cannot open include file: ‘iostream.h’: No such file or directory 看...

虾米的日常总结 2904

Unity2D脚本报错Vector2/3含义模糊解决方案Assets\c#\foxmove.cs(34,40): error CS0104: ‘Vector3‘ is an ambiguous ref

Assets\c#\foxmove.cs(34,40): error CS0104: 'Vector3' is an ambiguous reference between 'UnityEngine.Vector3' and 'System.Numerics.Vector3'报错的解决方案

m0_71895667的博客 1557

error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

VC6.0工程转VS2010工程出现的错误   问题:  error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认   VC6.0代码: operator=(const CVector2& rv) { this->x = rv.x; this->y = rv.y; };   解决方法:   VS2010代码 const CVect

eickandy的专栏 2100

CString的一个问题

ONCHAR消息处理中 CString s; s+=nChar; 这样不可以吗?编译出错。VC6.0好像可以的,2005不可以吗? 1>keyboard.cpp 1> WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) 1>d:\vc2005\keyboard\keyboard\keyboa

kudai1808的博客 353

C语言,C++ “xxxx” is ambiguous 的可能错因

1. 用户定义的变量名与函数库中的名字相同。 这种情况建议考虑命名一个CNNO1上去 2.把{ }大括号打成了[ ] (我的一个朋友告诉我的...

qq_51253844的博客 3764

Swift重载运算符、定义自己的运算符。

一、重载系统已存在的运算符。 swift中可以识别的运算符 + - * / % += -= ++ & | > >= < <= 这些运算符相当于一个方法名,可以用来定义 名字相同:运算符 参数个数:运算符为前置或者后置,一个参数,中置时两个参数。...

weixin_30438813的博客 305

关于重载提取运算符'<<'在VC6.0环境下产生二义性(ambiguous)的解决办法

今天编写了下列代码(仅仅显示关键代码片段),在VS2015上运行正常,但是在VC6.0下出现错误提示。 #include using namespace std; class vct { private: double x, y; public: //vct(double X = 0, double Y = 0) { x = X, y = Y; } //~vct() {} //void

ねこじゃんと言っています 833

C++ vector4实现

这篇文章在上一篇的基础之上,添加了第四分量w,并实现了Vector4的相关操作。经main函数测试,可以运行通过。

fmxs 1460

C++操作符重载

1.输入和输出操作符   对于输入和输出操作符,对其进行重载需要将操作符重载函数定义为非成员函数,否则操作符的左操作数只能是该类类型的对象。为了保证操作符重载函数能够正常访问类中定义的私有成员,需要将操作符重载函数定义为类的友元函数。下面是重载输入和输出操作符的一个简单例子。 #include <iostream> using namespace std; class po...

weixin_30887919的博客 655
上一篇: 关于vs2005远程工具不能连接wince设备进行调试的问题
下一篇: 非框架窗口键盘加速键的使用
gexueyuan
博客等级 码龄19年 92粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值