Array mit Objekten



  • Hi!

    Ich habe in meiner h-Datei diese Klasse hier:

    public ref class test_klasse{
     public:
    	System::String^ text_1;
    	System::String^ text_2;
    	System::String^ text_3;
    };
    

    In der dazugehörigen cpp-Datei steht dann das folgende:

    array<test_klasse ^> ^ der_text = gcnew array<test_klasse ^>(15);
    der_text[0]->text_1 = "Bla bla bla...";
    

    Beim Ausführen kommt es dann zu dieser Exception in der zweiten Zeile des Codes der cpp-Datei:

    Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in Test.exe aufgetreten.
    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    

    Irgendwie stehe ich da aufm Schlauch. In der Zeile mit dem "gcnew" habe ich doch eine Objektinstanz festgelegt - was ja von der Execption bestritten wird - oder etwa doch nicht?!? Ich tüfftel schon ewig an diesem Codestück herum und mitlerweile sehe ich wohl den Wald vor lauter Bäumen nicht mehr... Kann mir bitte jemand sagen wie der Code hier richtig wäre?



  • Du hast ein Array Objekt erstellt, noch nicht deine test_klasse Objekte im Array. Die musst du auch erst noch erstellen.



  • Zunächst einmal verwendest du öffentliche Variablen in deiner Klasse. Zum Testen ist das ok, aber du solltest Dir auf jeden Fall gleich angewöhnen Variablen innerhalb einer Klasse privat zu deklarieren und den Zugriff von aussen dann gegebenenfalls mittels property realisieren.

    Um Zwerglis Antwort zu erweitern:

    test_klasse^ tk = gcnew test_klasse();
    tk->text_1 = "Blah, blah, blah";
    
    der_text->SetValue(tk, 0);
    


  • @ Dappeljuh:
    Das mit der Property-Sache geht aber nur, wenn ich managed Code verwende, oder? Bzw. anders rum, wenn ich meine Klassen auch in anderen C++-Versionen (Borland, Visual 2003, ...) verwenden will, geht das nicht? Oder hab ich da mal wieder was falsch verstanden? 😉



  • IMHO gibt es property´s erst seit .Net2.0! Also kannst du Sie vorher nicht nutzen. Allerdings kann man ja in so einem Falle eigene get und set Methoden erstellen, um an die Werte zu gelangen. Ist halt nur die Syntax nicht so schön... 😃



  • 1000 Dank für die Antworten!
    Jetzt klappt es! Ich hätte es mir zwar nicht so aufwendig vorgestellt, aber hauptsache es funktioniert, also danke nochmal!


Anmelden zum Antworten