__property



  • Hallo!
    ich hoffe in diesem Forum eine Antwort zu finden, was ich im nachfolgenden Coe falsch gemacht habe, weil beim lesen oder schreiben der Variable Zugriffsverletzungen kommen - ich hab auch alles schon als public definiert, obwohl ich nicht glaube, dass die Zugriffsverletzung was damit zu tun hat...
    Sie ist auf jeden Fall immer noch da und ich weiß nicht mehr, was ich noch versuchen könnte...
    Danke schon mal für eure Ratschläge und Vorschläge!

    (ich nutze übrigens bcb5, aber das wird glaube ich nix damit zu tun haben...)

    class xyz
    {
    public:
                     __property int ID =           {read=GetID, write=SetID};
           int vID;
           void      __fastcall SetID              (int value) {vID = value;};
           int       __fastcall GetID              (void) {return vID;};
    };
    

    Schreiben: Form1->xyz->ID = x;
    Lesen: x = Form1->xyz->ID;

    Danke schon mal!



  • Achtung, Pseudocode!

    class xyz
    {
           unsigned int pValue;
           void __fastcall SetID(unsigned int &Value)   {
                  this->pValue = Value;
           }
    public:
                     __property unsigned int ID =           {read=pValue, write=SetID};
    };
    


  • Danke! Aber auch so kommt die Zugriffsverletzung noch!!!
    Ich hab mal nen neues Projekt angefangen, um bissl zu probieren:

    Die Header-Datei (mit deiner Variante):

    class xyz
    {
           int pValue;
           void __fastcall SetID(int &Value)
           {
            pValue = Value;
           }
    public:
           __property int ID =           {read=pValue, write=SetID};
    };
    
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TButton *Button1;
            TEdit *Edit1;
            TEdit *Edit2;
            void __fastcall Button1Click(TObject *Sender);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
            xyz *XYZ;
    };
    

    Die cpp-Datei:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     XYZ->ID = StrToInt(Edit2->Text);
     Edit1->Text = IntToStr(XYZ->ID);
    }
    


  • Hallo

    Ich vermute, das die Zugriffsverletzung nicht wegen der Property an sich kommt, denn die ist nämlich in Ordnung. Sondern weil du keine gültige instanz mit new von der Klasse angelegt hast.

    bis bald
    akari



  • Danke!
    Ja, das war es... Da ich das erste mal mit propertys arbeite, wusste ich nicht, dass ich das machen muss - ich dahcte, das wäre optional - aber jetzt funktioniert es 🙂
    Also danke noch mal 🙂

    Ciao Tom



  • akari for moderator 🙂


Anmelden zum Antworten