Hi Leute,
ich hab ein Problem bei der Konvertierung von string nach String.
Will ich in eine Listbox einen string einfügen, muss ich ihn ja erst in
String konveiteren.
Das klappt auch mit:
Wenn ich jetzt aber vor dem Umwandeln noch Zeichen vor den string
einfüge:
1
name.insert(name.begin(),n,' ');
stürzt das Programm beim Einfügen in die Listbox ab. Mit dem Workaround
aus dem folgenden Beispiel geht es dann wieder, ist aber unnötig
umständlich und ich frage mich, wie das passieren kann.
Vielleicht mache ich auch einen einfachen Fehler, aber ich sehe ihn
nicht.
Danke für jede Antwort!
A. C. schrieb:> name.insert(name.begin(), n, ' ');
vermutlich weil du einen Iterator holst und gleich noch den Container,
sprich den String/string modifizierst. Das ist wie i=i++;
Ansonsten gibt es keinen String in C++, es gibt std::string.
Wie es scheint bist du in einer "seltsamen" Umgebung unterwegs.
Wahrscheinclich .. Managed C++ .. Gott behütte :)
Das insert MUSS ich aber genauso machen, der Iterator wird von "insert"
an dieser Stelle erwartet.
> name.insert(name.begin(), n, ' ');
Dass es in C++ keinen String gibt weiss ich, deswegen muss ich ja für
CLI explizit konvertieren. Aber du hast recht, ich habe nicht gesagt
dass ich unter VS2010 in CLI/C++ programmiere.
Was ist an managed C++ so schlecht?
Danke für deine Antwort,
GRuß Michael
A. C. schrieb:> Was ist an managed C++ so schlecht?
Es ist kein C++, und hat nur namentlich damit zu tun. Und es ist äußerst
irritierend, wenn Leute immer wieder davon sprechen, sie würden in "C++"
programmieren, wenn sie es letztlich nicht tun, sondern diesen
.Net-Dialekt nutzen.
A. C. schrieb:> Was ist an managed C++ so schlecht?
irgendwie ist es nichts halbes und ganzes. Wenn man .net machen will
dann ist C# das richtige. Wenn man C++ machen will dann normales C++.
Beide dinge zu mischen halte ich nicht für sinnvoll weil es komplett
verschiedene Ansätzte sind.
Rainer Hohn schrieb:> Gibt es realistische Fälle wo das ein Problem werden kann?
Richtige C- oder C++-Compiler akzeptieren so etwas nicht.
Sourcecode ist 7-Bit-ASCII, mit Ausnahme von Kommentaren, String- oder
char-Konstanten, aber das ist dann auch schon nicht mehr zwingend
portabel.
Danke euch allen für eure Antworten,
jetzt weiss ich in einigen Bereichen schonmal mehr.
Um trotzdem nochmal auf die urspürngliche Frage zurück zu kommen, hat
jemand da noch ne Idee woher das Problem kommen könnte. Spuckt da
irgendein garbage collector oder ähnliches rein.
Solche nicht ersichtlichen Fehler möchte ich später eigentlich nicht in
größeren Projekten haben.
Viele Grüße
Rainer
Zum Problem zurück:
Ich vermute
gcnew String(char *)
Verursacht das problem, vor allem wenn der char-Pointer nur temporär
gültig ist.
Versuch mal
marshal_cppstd.h
und verwende "marshal_as":
Hallo Ernst,
wenn ich eben eine lokale Variable String^ strHaha definiere und dieser
dann das gcnew(char *) zuweise passiert nichts.
Nur Wenn ich gcnew(char *) direkt in der items->insert() Funktion mache,
passiert es.
Ich hab nochmal beide Varianten neben einander gestellt.
Problem tritt auf
Das gcnew im zweiten Beispiel in der insertfunktion ist natürlich
unnötig, aber ich habs drin gelassen, damit bei beiden Varianten ein
gcnew im insert drin ist.
marshall wollte ich auchmal verwenden, aber bei mir wird "
marshal_cppstd.h" nicht gefunden.