struct: Wer lässt sich nicht ändern
-
Hej.
Ich arbeite gerade mit Strukt:
int main() { struct Person { char chName[21]; int iAlter; float fGewicht; char chBeruf[41]; }; struct Person Person1 = {"Krause", 23, 87.98, "Maler"}; Person *Eintragungsbot = 0; Eintragungsbot=&Person1; Eintragungsbot->fGewicht = 99.99; Eintragungsbot->chName[21] = "Denis";Nun will ich mit den letzten Zeilen, die Werte umändern.
MitEintragungsbot->fGewicht = 99.99;klappts auch wunderbar.
Aber bei
Eintragungsbot->chName[21] = "Denis";meckert er rum:
Error 3 error C2440: '=' : cannot convert from 'const char [6]' to 'char'
Woran liegts?
-
Eintragungsbot->chName = "Denis";Und ein Tipp: Arbeite nicht mit char-Arrays, sondern lieber mit std::string. Besonders, da due arrays anscheinend noch nicht so richtig verstehst und char arrays ganz besonders fehleranfällig sind.
-
SeppJ schrieb:
Eintragungsbot->chName = "Denis";Und ein Tipp: Arbeite nicht mit char-Arrays, sondern lieber mit std::string. Besonders, da due arrays anscheinend noch nicht so richtig verstehst und char arrays ganz besonders fehleranfällig sind.
hehe das war auch meine erste variante aber da kam/kommt der Fehler:
Error 3 error C2440: '=' : cannot convert from 'const char [6]' to 'char [21]'
-
Kann nicht sein, zeig mal deinen Code.
-
bastlerhannes schrieb:
hehe das war auch meine erste variante aber da kam/kommt der Fehler:
Du solltest auch
std::stringnehmen.char-Arrays wurden hauptsächlich in C verwendet, in C++ gibt es für viele Fälle bessere Möglichkeiten. Du musst dich nicht selber um die Speicherverwaltung kümmern und kannst viel komfortabler Operationen wie Zusammenfügen, Teilstrings und solche Dinge ausführen. Die Fehleranfälligkeit wird stark reduziert.Aber falls du es trotzdem unbedingt mit
char[]machen willst, solltest du den Artikel über Zeiger lesen und auf www.cplusplus.com die Funktionen im Header<cstring>(z.B.strcpy()) nachschauen.Kóyaánasqatsi schrieb:
Kann nicht sein, zeig mal deinen Code.
Natürlich kann es sein, man darf Arrays nicht zuweisen.
-
Nexus schrieb:
kann es sein, man darf Arrays nicht zuweisen.
Er sagte doch, es handele sich um std::string?
-
Kóyaánasqatsi schrieb:
Er sagte doch, es handele sich um std::string?
Er sagte "das war meine erste Variante" und meinte damit *höchstwahrscheinlich* nur den Code-Teil in seinem Zitat, der nebenbei exakt zur Fehlermeldung passt.
-
Kóyaánasqatsi schrieb:
Er sagte doch, es handele sich um std::string?
Sieht eine Fehlermeldung bei
std::stringso aus?Error 3 error C2440: '=' : cannot convert from 'const char [6]' to 'char [21]'
-
Ups, man sollte sich vielleicht, das ganze Programm angucken und nicht nur die Zeile mit dem Fehler. Du hast nicht bloß einen Syntaxfehler, sondern auch einen Logikfehler, den Nexus schon erklärt hat.
So ist es formal richtig:
int main() { struct Person { char *chName; int iAlter; float fGewicht; char *chBeruf; }; struct Person Person1 = {"Krause", 23, 87.98, "Maler"}; Person *Eintragungsbot = 0; Eintragungsbot=&Person1; Eintragungsbot->fGewicht = 99.99; Eintragungsbot->chName = "Denis"; }Das ist aber wirklich ganz ganz schlechtes C++ und auch schlechtes C und gibt zurecht 1000 Warnungen beim Compilieren, auch wenn hier das erreicht wird, was du willst.
-
Nexus schrieb:
Kóyaánasqatsi schrieb:
Er sagte doch, es handele sich um std::string?
Sieht eine Fehlermeldung bei
std::stringso aus?Error 3 error C2440: '=' : cannot convert from 'const char [6]' to 'char [21]'Mäuschen, deswegen sagte ich doch, dass es nicht sein könnte...
-
Kóyaánasqatsi schrieb:
Nexus schrieb:
Kóyaánasqatsi schrieb:
Er sagte doch, es handele sich um std::string?
Sieht eine Fehlermeldung bei
std::stringso aus?Error 3 error C2440: '=' : cannot convert from 'const char [6]' to 'char [21]'Mäuschen, deswegen sagte ich doch, dass es nicht sein könnte...
Das Missverständnis das hier vorliegt, ist, dass der Threadersteller sich mit "erste Variante" auf meine Korrektur des Syntaxfehlers bezog, nicht auf meine Bemerkung zu std::string.
-
Kóyaánasqatsi schrieb:
Mäuschen, deswegen sagte ich doch, dass es nicht sein könnte...
Hör bitte mit solchem Schwachsinn wie "Mäuschen" auf. Danke.

Du brauchst dich ausserdem nicht im Nachhinein hinauszureden, nur weil du wieder mal ohne zu überlegen geantwortet hast. Nächstes Mal wäre es besser, du würdest entweder in Ruhe das Problem analysieren und eine sinnvolle Antwort geben oder es gleich lassen.