AnsiString in Label1->Caption schreiben



  • Hallo ich habe ein Problem,

    ich habe eine Klasse und mir dazu einen Konstruktor geschrieben.
    In diesem Konstruktor wird einen Variable AnsiString Text mit einem Textfeld eines Edit1-Feldes beschrieben und als Instanz1 generiert.
    Ich will nun zur Überprüfung diese Variable Instanz1.Text nach Label1->Caption schreiben.

    Code:

    Label1->Caption = Instanz1.Text

    liefert beim Compilieren folgenden Fehler:

    "E2034 Konvertierung von 'AnsiString *' nach 'AnsiString' nicht möglich."

    Ich benutzte BCB6

    Kann mir da jemand helfen?



  • Hallo

    Deine Beschreibung klingt ein bißchen wirr.

    Aber die Fehlermeldung des Compiler sagt klar aus das die Eigenschaft <DeineKlasse>::Text ein Pointer ist, und du must zumindestens diesen Pointer dereferenzieren. Aber besser ist wenn du ganz auf den Pointer verzichtest und einen "normalen" AnsiString-Member draus machst.

    bis bald
    akari



  • OK zur Verdeutlichung:

    Es gibt in einem Formular Form1 ein Edit1,Button1 und Label1 Feld

    Deklaration:

    class test{
        int number;
    
        public:
        AnsiString Text;
    
        test(AnsiString,int);
    };
    
    //Konstruktor
    test::test(AnsiString name,int num){
    
        AnsiString Text=name;
        number=num;
    }
    

    Form1.cpp

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
    //Instanz bilden
        Test Instanz1(Edit1->Text,Edit1->Tag);
    
    //AnsiString an Label übergeben
        Label1->Caption=Instanz1.Text;
    

    Wo sind da jetzt Zeiger???? 😕 😕



  • Hallo

    In deinem geposteten Quellcode sehe ich auch keinen. Und wenn man den Fehler behebt das die Klasse "test" einmal groß und einmal klein geschrieben wird dann kompiliert der Code auch.

    Dein Fehler liegt also woanders, der Compiler hat jedenfalls immer recht

    bis bald
    akari



  • Tja das ist genau das Problem.

    Wenn ich die letzte Zeile auskommentiere, funktioniert alles prima, der Compiler hat keine Fehlermeldung.
    Sobald ich die Zeile wieder reinmache, erscheint beim Compilieren der Fehler
    "E2034 Konvertierung von 'AnsiString *' nach 'AnsiString' nicht möglich."

    Weiss vielleicht jemand anders Rat?



  • Hallo

    -Neues Projekt erstellen
    -Ein Label, ein Edit und ein Button reinsetzen
    - Event für Button erstellen und Code ergänzen

    class Test{
        int number;
    
        public:
        AnsiString Text;
    
        Test(AnsiString,int);
    };
    //Konstruktor
    Test::Test(AnsiString name,int num){
    
        AnsiString Text=name;
        number=num;
    }
    
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
    //Instanz bilden
        Test Instanz1(Edit1->Text,Edit1->Tag);
    
    //AnsiString an Label übergeben
        Label1->Caption=Instanz1.Text;
    }
    

    Kompiliert fehlerlos

    bis bald
    akari



  • Das ist richtig.
    Kompiliert fehlerlos ABER das Ergebnis ist: NULL

    --> Instanz1.Text ist ein Pointer meiner Meinung nach.

    Aber wie krieg ich das dann hin?



  • Hallo,

    mach es am besten so

    test::test(AnsiString name,int num){
    
        Text=name;
        number=num;
    }
    

    Gruß Daniel



  • JAUUUUUU! Jetzt klappts.

    Auch wenn ichs noch nicht ganz verstanden habe warum 😕

    Trotzdem vielen Dank.

    Wenn mir jemand auch noch eine Erklärung dafür hat, hab ich mal wieder was zum Studieren für späte Abendstunden 😃



  • Hallo,
    du hast AnsiString Text schon deklariert und zwar global und jetzt noch mal lokal und da wirt immer die lokalere Variable genommen.

    Gruß Daniel



  • Ja klar 😮 😮
    Da hätt ich aber auch selber draufkommen sollen ........

    Danke an alle! 🙂 🙂 🙂


Anmelden zum Antworten