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

时间:2021-05-30 16:11:18

      一个以前的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