Wie kann ich mit gcnew erzeugte Objekte wieder auffinden?



  • Hallo zusammen,
    bin leider absoluter Anfänger also Sorry falls die Frage zu simpel ist: 🙄

    Ich habe mir mit

    ref class Base
    

    eine Klasse definiert, aus der ich mit gcnew Objekte erzeuge, die beim erzeugen sowohl boolsche Werte als auch arrays (mit get und set-Aufrufen) aufnehmen.

    Nun sollen im laufe des Programms ca. 100 verschiedene Base's (also Stützpunkte) mit natürlich unterschiedlichen Parametern erzeugt und teilweise miteinander verglichen werden.

    Meine Frage ist nun wie ich wieder an die Trackinghandles, oder die Adressen der unterschiedlichen Objekte, die bei der Erzeugung ja alle gleich aufgerufen werden, rankomme:

    Base^ Base_Obj = gcnew Base(x,y,angle,height);
    

    Ich hatte bereits folgendes versucht:

    std:: vector<int^> MyBaseContainer;
    Base^ Base_Obj = gcnew Base(x,y,angle,height);
    MyBaseContainer.push_back(Base_Obj);
    

    Leider liefert mir der Compiler eine Fehler:

    C2664 "Konvertierung des Parameters 1 von Base^ in System::Int32^const &' nicht möglich"

    Was mache ich falsch, bzw. wie kann man (möglichst einfach 😉 ) meine Base_Obj-Objekte auch nach der Erzeugung des nächsten Objekts noch zugreifbar machen?

    Gruß,
    Jean-Luc
    ((Visual Studio 2005, c++/cli (.net))



  • also hab ich das richtig verstanden, dass du mehrere Objekte von der gleichen Klasse erzeugen willst und dann damit z.B. unter den Objekten vergleiche machst ja? dann würde ich dir empfehlen, die objekte als array zu erzeugen, wie du es mit normalen variablen auch machst, nur, dass du eben dein objekt als datentyp im array hast.



  • Die STL kannst Du mit VC2005 nicht verwenden!!!
    Verwende die System::Collection(::Generics)-Klassen dafür!



  • Jau vielen Dank schon mal, dass war mit den System::Collection::Generics war ein super-Hinweis!

    Ich habe nun mit folgendem eine schicke Liste:

    static List<Base^>^ BaseList = gcnew<Base^>(400)
    

    Mit folgendem Code kann ich nun auch Objekte hinzufügen:

    Base_Obj = gcnew base(1,x,y,angle);
    BaseList->Add(Base_Obj);
    Base_Obj = gcnew base(2,x,y,angle);
    BaseList->Add(Base_Obj);
    

    Nun noch eine Frage: Wie bekomme ich jetzt gezielt an das erste Objekt ran?

    Schick wäre ja sowas in der Art:

    BaseList[0]->Get(Base_Obj_Copy);
    

    Also ich würde gerne mittels Index i (in diesem Fall 0) das erste Objekt aus der Liste holen und in Base_Obj_Copy schreiben, von dem aus ich dann all meine gespeicherten Daten ansprechen kann. Gibt es diese Möglichkeit?

    Gruß,
    Jean-Luc



  • Warum testest Du das nicht? Oder list die Dokumentation?



  • BaseList[0]
    

    !?



  • Sorry hab den Wald vor lauter Bäumen nicht gesehen.
    Ich hatte einen Tippfehler und deswegen nicht bemerkt, dass es funktioniert.

    Also

    BaseList[0]->
    

    erlaubt natürlich (zumindest wenn man auch für die Arrays in den Base-Objekten get und set-Funktionen definiert hat) das Auslesen. Und der Index i von BaseList[i] spricht tatsächlich das jeweilige ite-Objekt an.

    Also:

    Vielen Dank für die Infos, habe auf jeden Fall eine Menge dazugelernt. Hoffe dies hier hilft auch anderen die versuchen Objekte in Listen unter VC2005 C++ mit .net und CLI zu speichern.

    Gruß,
    Jean-Luc

    P.S.: Von mir aus kann der Thread geschlossen werden.


Anmelden zum Antworten