Welchen Fehler hbe ich gemacht? Bitte helfen :(



  • Hallo kann mir einer sagen was ich hier falsch gemacht habe? Es kommt die Fehlermeldung "[C++ Fehler] Unit1.cpp(24): E2034 Konvertierung von 'char' nach 'char *' nicht möglich"

    if(Edit1->Text[x] == "+")
     {
     ...
     }
    

    Danke



  • if(Edit1->Text[x] == '+')
     {
     ...
     }
    


  • Ich glaube ich erweitere mal weil ich gar nicht mehr durchblicke:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    for(int x; x < Edit1->Text.Length(); x++)
     {
     if(Edit1->Text[x] == '+')
      {
      Mitte = Edit1->Text[x];
      Zahl1 = StrToInt(Edit1->Text.SubString(1,x-1));
      Zahl2 = StrToInt(Edit1->Text.SubString(x+1,Edit1->Text.Length()));
      Label1->Caption = Zahl1+Zahl2;
      }
     }
    }
    

    Wie man sieht versuche ich selber einen Taschenrechner zu programmieren
    Ist nur ein Test....Aber am Ende wird das Ergebnis nicht auf Label1->Caption angezeigt. Und ich finde den Fehler nicht Bitte Hilfe ^^ danke



  • x ist nicht initialisiert -> Programm neigt zu undefiniertem Verhalten...



  • Falls du es nicht selbst weisst:

    for (int x = 0 ......)



  • Besser

    for (int x = 1 ......)
    

    da bei AnsiString der Index bei 1 beginnt.



  • Und das ist dann auch falsch. Wenn überhaupt, dann x = 1. Edit1->Text ist vmo Typ AnsiString und die Daten beginnen nicht bei 0, sondern bei 1.
    Mittes AnsiString::AnsiPos wäre das sowieso eleganter zu lösen. Und eine Überprüfung, ob da überhaupt Zahlen eingeben wurden wäre auch nicht schlecht.

    [Edit] Och nö, da ist akari schon mal nicht da - und dann tippselt Braunstein schneller... 😉



  • Vielen Dank!



  • also wenn du das erste zeichen aus dem edit-feld edit1 haben möchtest

    kannst du c_str() oder substring funktion benutzen

    Edit1->Text.c_str();
    
    Edit1->Text.SubString(1,1);
    


  • Kannst du mir verraten, was das jetzt soll.
    Edit1->Text[1] funktioniert schon, wobei es hier besser wäre den Text erst auf eine temporäre AnsiString-Variable zwischenzuspeichern und darauf zu arbeiten.
    c_str() liefert mit const char* einen Pointer auf den internen Datenpuffer (Nullterminiert) und nicht das erste Zeichen.
    SubString(1,1) liefert zwar das erste Zeichen, aber als AnsiString und nicht als char.


Anmelden zum Antworten