C ++“无法添加两个指针”,将一个硬编码字符串添加到CString

时间:2013-05-01 19:02:54

标签: c++ string mfc

当我尝试做类似这样的事情时,我经常会遇到这个错误

CString filePath = theApp->GetSystemPath() + "test.bmp";

编译器告诉我

error C2110: '+' : cannot add two pointers

但是,如果我将其改为以下,它可以正常工作吗?

CString filePath = theApp->GetSystemPath();
filePath += "test.bmp";

函数GetSystemPath返回LPCTSTR(如果它与它有关)

4 个答案:

答案 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 +)超载需要CStringconst 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" );