C++ "cannot add two pointers", das hinzufügen einer hartcodierten Zeichenfolge zu einem CString
Bekomme ich diesen Fehler Recht oft, wenn ich versuche, so etwas zu tun
CString filePath = theApp->GetSystemPath() + "test.bmp";
Der compiler sagt mir
error C2110: '+' : cannot add two pointers
Aber wenn ich es ändern auf dieser unter es funktioniert?
CString filePath = theApp->GetSystemPath();
filePath += "test.bmp";
Die Funktion GetSystemPath
gibt einen LPCTSTR wenn, dass hat nichts damit zu tun
- was happends, wenn Sie es ändern, um CString(theApp->GetSystemPath()) + CString("test.bmp"); ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies hat zu tun mit der Art der Objekte, die Sie zu tun haben.
Zeile oben ist versucht, fügen Sie die Art der GetSystemPath() mit " - test.bmp" oder ein LPCTSTR + char[]; Der compiler nicht wissen, wie Sie dies tun, weil Ihr keine " + " - operator für diese beiden Arten.
Den Grund, warum das funktioniert:
Ist, weil Sie tun, CString + char[] (char*); CString-Klasse hat den operator + überladen, um Unterstützung für das hinzufügen von CString + char*. Oder alternativ die Konstruktion einer CString aus einem char* vor der Anwendung der Additions-operator auf zwei CString-Objekten. LPCTSTR nicht dieser operator überladen oder die richtigen Konstruktoren definiert.
Gut Sie können nicht hinzufügen, zwei Zeiger. Der Grund
filePath += "test.bmp";
funktioniert, ist, dass auf der linken Seite ist ein CString nicht ein Zeiger. Dies würde auch die Arbeitund so würde diese
Die Regeln der C++ - verhindern Sie das überladen von Operatoren es sei denn, mindestens eines der Argumente ist von der Klasse geben. Es ist also nicht möglich, für jeden der überlastung der operator+ für die Zeiger nur.
Dabei:
Sie versuchen, zu Summe zwei Zeiger Typ
const char*
. Der compiler sagt Ihnen, es gibt keine überlastung deroperator +
akzeptiert zwei Zeiger vom Typconst char*
s als Eingabe (nach allem, was Sie wollen, ist nicht die Summe der Hinweise, aber zum verketten von null-terminierte Zeichenfolgen, um durch diese Zeiger).Auf der anderen Seite, es ist eine überlastung der
operator +=
(sowie deroperator +
), das dauert einCString
und einconst char*
, das ist der Grund, warum das zweite Beispiel kompiliert. Aus dem gleichen Grund, dies auch funktionieren würde:Sowie diese:
Der compiler möglicherweise nicht bewusst sein, dass der Programmierer beabsichtigt, um zwei strings zu verketten. lediglich sieht, dass ein
char const *
Hinzugefügt wird, mit anderen mit den+
Betreiber.Ich würde versuchen, so etwas wie dieses: