Const Char kann nicht in Char konvertiert werden. Will ich auch nicht :D
-
Falls du deinen Code trotzdem zum laufen bringen willst (was ich dir nicht empfehle):
struct TestStrukt { const char* TestChar1; const char* TestChar2; } Testen[10]; int main() { Testen->TestChar1 = "Halloooo"; Testen->TestChar2 = "Tschüüüs"; }MfG, EOutOfResources
-
EOutOfResources schrieb:
Falls du deinen Code trotzdem zum laufen bringen willst (was ich dir nicht empfehle):
struct TestStrukt { const char* TestChar1; const char* TestChar2; } Testen[10]; int main() { Testen->TestChar1 = "Halloooo"; Testen->TestChar2 = "Tschüüüs"; }MfG, EOutOfResources
Oh, Weh! Compilierbar heißt noch lange nicht, dass da auch etwas sinnvolles passiert.
. Klar, du weißt was hier passiert, aber ich wette, dem Threadersteller ist noch nicht einmal klar, was er mit dem struct TestStrukt {...} Testen[10];überhaupt gemacht hat, geschweige denn, was dasTesten->TestChar1in diesem Zusammenhang macht.
-
Vielen Dank für die Antworten.
Es wurde erwähnt, dass String zu langsam sei. Was wird mir denn nun empfohlen zu machen?
Ich verstehe schon was ein struct ist und was const char ist und was ein Pointer ist. Also ein Blutiger anfänger bin ich nicht. Ich verstehe nur nicht, warum der Compiler behauptet, dass so konvertieren zu müssen. Ich war schon am rätaeln. Aber ich glaube, dass die Art und Weise wie ich das vorhabe, so nicht geht.
Vielleicht hilft es, wenn ich formuliere was ich vorhabe, sofern das noch nicht aus meinem Code hervorgeht.
Ich möchte nun eine Klasse erstellen, die dann Objekte hat mit Eigenschaften wie Name, Farbe, Preis. Für Name und Farbe will ich ein Char nehmen und für Preis ein Int. Dann sollen die Objekte mit Daten gefüllt werden. Da die Inhalte nicht dynamisch sind, muss ich diese manuell eingeben. Das geschieht vorher, also nicht mit Cin oder so.
Ich hoffe, dass ihr mich alle versteht

-
Benson schrieb:
Es wurde erwähnt, dass String zu langsam sei.
Da hast du mich falsch verstanden. Ich wollte etwas Posten, aber SeppJ war schneller. Deshalb habe ich meinen Post in "Zu langsam..." geändert.
std::stringist natürlich optimal!
-
Hahaha, okay dann ist ja gut.
Okay, dann habe ich eine philosophische Frage. Warum sollte man Char nehmen, wenn String auch geht. Geht es dabei lediglich darum, dass das Programm größer ist wegen dem zusätzlichen Header? Oder was ist dann im groben der Unterschied?
-
Benson schrieb:
Warum sollte man Char nehmen, wenn String auch geht.
Abwärtskompatibilität zu C.
Benson schrieb:
dem zusätzlichen Header?
Ein C-String benötigt keine Header.
-
okay, aber wäre es vielleicht noch möglich eine Lösung für Char zu finden?
Das wäre nett.
-
Benson schrieb:
okay, aber wäre es vielleicht noch möglich eine Lösung für Char zu finden?
Das Ding heisst C-String!
Und ich habe schon eine Lösung für die Verwendung eines C-Strings gepostet. Liest du denn nicht mal die Antworten auf deine eigene Frage?
-
Verwende std::string. Es ist einfacher, intuitiver und schützt dich vor Zugriffsfehlern.
-
Benson schrieb:
okay, aber wäre es vielleicht noch möglich eine Lösung für Char zu finden?
Das wäre nett.struct TestStrukt { char TestChar1[50]; char TestChar2[50]; } Testen[10]; strcpy( Testen[0].TestChar1, "Halloooo" ); strcpy( Testen[0].TestChar2, "Tschüüüs" );
-
Benson schrieb:
Bekomme nun den Fehler dass ich const char [] nicht in char [50] konvertieren kann.
Aber das will ich in prinzip ja auch garnicht machen. Wie schaffe ich das, dass er das was in den Klammern ist kein const char ist
Muss ich mit Pointern arbeiten?Das schaffst du gar nicht da das was in den Anführugsstrichen ein Stringliteral ist und diese sind automatisch vom Typ const char[n], n entsprich der Anzahl der Zeichen vom Stringliteral plus abschließende Nullterminierung.
Wie meine Vorredner auch schon sagten, nehm am besten std::string. Aber in nem guten Einsteigerbuch für C++ wird dir trotzdem auch alles rund um char, char*, const char und const char* erklärt. Dann kann man auch mal damit rumhantieren, wenn man weiß was man macht:-P;-)
Lg freeG
-
EOutOfResources schrieb:
Und ich habe schon eine Lösung für die Verwendung eines C-Strings gepostet.
Und zwar eine, wo schon Andere gesagt haben, das diese falsch ist. Wenn er wirklich C-Strings braucht sollte er die Lösung von EOP verwenden.
-
asc schrieb:
Und zwar eine, wo schon Andere gesagt haben, das diese falsch ist.
Also, der Code den ich geschrieben habe funktioniert wie erwartet. SeppJ hat wahrscheinlich gemeint, dass der Thread-Starter nicht weiss, was ich damit meine.
MfG, EOutOfResources.
PS: Ich habe den Code in CodeGear RAD Studio 2009 und in MSVC++ getestet.
-
Mag sein das das compiliert, aber weißt du auch was da genau passiert?
-
EOutOfResources schrieb:
Also, der Code den ich geschrieben habe funktioniert wie erwartet.
Oh, ich habe schon selbst Fehler gebaut die erst sehr spät unangenehm aufgefallen sind. Man kann nicht immer von "funktioniert" auf "ist Richtig" zurück schließen.
-
Braunstein schrieb:
Mag sein das das compiliert, aber weißt du auch was da genau passiert?
Was sollte daran so unerwartet sein?
-
EOutOfResources schrieb:
Braunstein schrieb:
Mag sein das das compiliert, aber weißt du auch was da genau passiert?
Was sollte daran so unerwartet sein?
Das Testen ein Array ist.
-
ipsec schrieb:
Das Testen ein Array ist.
Der Threadstarter hat ja selbst ein Array gemacht und ich habe den "->"-Operator verwendet.
-
Ja nun ist aber der operator-> auf ein Array zumindest sehr ungewöhnlich und der TE wird sicher denken, dass damit etwas anderes gemeint wäre, als eigentlich passiert.
-
EOutOfResources schrieb:
Falls du deinen Code trotzdem zum laufen bringen willst (was ich dir nicht empfehle):
struct TestStrukt { const char* TestChar1; const char* TestChar2; } Testen[10]; int main() { Testen->TestChar1 = "Halloooo"; Testen->TestChar2 = "Tschüüüs"; }MfG, EOutOfResources
MfG, EOutOfMind wäre zutreffender.