System::String- wie kann ich einen String "anhängen"?
-
Hi,
wie funktioniert das bei System::String Objekten?
So scheinbar nicht, da erhalte ich einen:
(...) : error C2297: '+=': Ungültig, da der rechte Operand vom Typ 'System::String __gc *' ist
(...) : error C2845: '+=': Zeigerarithmetik kann nicht an einem __gc-Zeiger 'System::String __gc *' durchgeführt werdenvoid SendFile(String *filename) { String *path = new String("C:\\test"); path+=filename; (...)
Funktioniert leider nicht- warum?
-
In managed C++ ist dies leider noch sehr umständlich... du musst von "Hand" die "Concat" Methode aufrufen...
String::Concat(S"C:\\test", filename);
PS: Du solltest *jeden* managed String mit eine "S" als prefix versehen, da Du Dir sonst unnötigen Convertierungs-Code einhandelst!
-
Vielen Dank!
Jetzt weiss ich auch was das mit dem S immer soll...concatenate...warum kommt mir das so bekannt vor
-
Du solltest auch nicht versuchen Adressen zu addieren.
Es müsste schon eher so aussehen:void SendFile(String *filename) { String *path = new String("C:\\test"); *path+=*filename;
Gruß charlie
-
1. Du hast vergessen ein "S" vor den String zu setzen
2.error C2676 schrieb:
binary '+=' : 'System::String' does not define this operator or a conversion to a type acceptable to the predefined operator
3. Du kannst selber in den IL reinschauen und wirst festellen, dass es tatsächlich keinen "String::op_add" gibt!
4. Das es in C# (2002/3) geht hängt nur damit zusammen, dass der C#-Compiler automatisch aus einen "+" ein "Concat" macht!
-
Schon gut. Ich wollte ihm nur klarmachen, dass er einen grundlegenden Fehler in
der Syntax hat. Wollte deine Lösung keineswegs in Frage stellen.
-
Ich wollte Dein Kommentar ja auch nicht in Frage stellen, sondern nur zeigen, das es so nicht geht
PS: Es handelt sich nicht um "Zeiger" sondern um "Referenzen" auf GC-Objekte