Problem mit Array in Memberfunktion



  • hi,

    wahrscheinlich ein triviales Problem, aber ich finde momentan einfach keine Lösung:

    Beispiel:
    Im Kontruktor:

    array<UInt16,2>^ Field_2D = gcnew array<UInt16,2>(10,10);
    	Field_2D[3,3] = (UInt16)25;
    

    klappt wunderbar. Dann im ButtonClick Handler:

    System::Void User_Interface::button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
    
        Field_2D[4,4] = (UInt16)25;
    
    }
    

    Hier erscheint zur Laufzeit ein Fehler, der was einer unbehandelten Ausnahme in der Anwenung sagt.

    Wie kann ich denn ein Element in den Array einfügen, ohne das meine RTE meckert?
    hier noch die deklaration:

    array<UInt16,2>^ Field_2D;
    

    Jemand eine Idee?
    gruß



  • 1. Du musst ein deiner Klasse das Array mit dem Namen Field_2D dekl.
    2. Du musst im Konstruktur eine Instanz erzeugen (mit gcnew) und dabei NICHT ein neues lokales Array anlegen.

    Sollte so aussehen:

    ref class A
    {
    public:
       A()
       {
          Field_2D = gcnew array<UInt16, 2>(10, 10);
       }
    
       void test()
       {
          Field_2D[4, 4] = 25;
       }
    
    private:
       array<UInt16, 2> Field_2D;
    };
    

    Simon



  • mist, jetzt seh ich erst, dass ich das ganze nochmal lokal angelegt habe!
    Wieso sagt der compiler nix? Wie kann er das gerade Angelegte von dem in der header Datei unterscheiden? Anderer Gültigkeitsbereich? Hätte ich im konstruktor einmal Field_2d(lokal) und einmal this->Field_2d(klassenmember) ansprechen können?



  • wanderameise schrieb:

    mist, jetzt seh ich erst, dass ich das ganze nochmal lokal angelegt habe!
    Wieso sagt der compiler nix? Wie kann er das gerade Angelegte von dem in der header Datei unterscheiden? Anderer Gültigkeitsbereich? Hätte ich im konstruktor einmal Field_2d(lokal) und einmal this->Field_2d(klassenmember) ansprechen können?

    Weil er denkt dass es so sein soll, Anderer Gültigkeitsbereich, genau, ja


Anmelden zum Antworten