当我尝试做类似这样的事情时,我经常会遇到这个错误
CString filePath = theApp->GetSystemPath() + "test.bmp";
编译器告诉我
error C2110: '+' : cannot add two pointers
但是,如果我将其改为以下,它可以正常工作吗?
CString filePath = theApp->GetSystemPath();
filePath += "test.bmp";
函数GetSystemPath
返回LPCTSTR(如果它与它有关)
答案 0 :(得分:5)
这与您正在处理的对象类型有关。
CString filePath = theApp->GetSystemPath() + "test.bmp";
上面一行试图用“test.bmp”或LPCTSTR + char []添加GetSystemPath()的类型;编译器不知道如何执行此操作,因为它们对于这两种类型不是+运算符。
这是有效的原因:
filePath += "test.bmp";
是因为你正在做CString + char [](char *); CString类重载了+运算符以支持添加CString + char *。或者可选地,在将两个CString对象上的加法运算符应用之前,从char *构造CString。 LPCTSTR没有重载此运算符或定义了正确的构造函数。
答案 1 :(得分:4)
嗯,你不能添加两个指针。 filePath += "test.bmp";
工作的原因是左侧是CString而不是指针。这也可行
CString(theApp->GetSystemPath()) + "test.bmp";
这样
theApp->GetSystemPath() + CString("test.bmp");
C ++的规则会阻止您重载运算符,除非至少有一个参数是类类型。因此,任何人都不可能仅仅为指针重载operator +。
答案 2 :(得分:2)
这样做时:
CString filePath = theApp->GetSystemPath() + "test.bmp";
您正在尝试对const char*
类型的两个指针求和。正如编译器告诉你的那样,没有operator +
的重载接受两个类型为const char*
的指针作为其输入(毕竟,你想要的不是对指针求和,而是连接指针这些指针指向的以零结尾的字符串)。
另一方面,operator +=
(以及operator +
)超载需要CString
和const char*
,这就是第二个示例编译。出于同样的原因,这也可行:
CString filePath = theApp->GetSystemPath() + CString("test.bmp");
以及:
CString filePath = CString(theApp->GetSystemPath()) + "test.bmp";
答案 3 :(得分:0)
编译器可能不知道程序员打算连接两个字符串。它只是看到char const *
正在使用+
运算符添加另一个{。}}。
我会尝试这样的事情:
CString filePath = CString( theApp->GetSystemPath() ) + CString( "test.bmp" );