Array Objekt per Parameter an Methode übergeben



  • ich hoffe, ich habe richtig verstanden, was du suchst:

    void mSetTest5(CKlasse1* objParm)
            {
              objParm[0].mSetTest(5);
    
    Klasse2.mSetTest5(Klasse1);
    

    uups, ich habe aus versehen Bearbeiten statt Antworten geklickt und habe deine frage mit meiner antwort überschrieben. sorry.

    ähm, erinnere ich mich richtig, daß du in Klasse1 drei elemente hast und später fünf elemente adressierst? das würde nicht gehen.



  • WTF? Was läuft den hier?! Wie kann einer einen Beitrag von jemand anderem überschreiben?!



  • drakon schrieb:

    WTF? Was läuft den hier?! Wie kann einer einen Beitrag von jemand anderem überschreiben?!

    ich bin in diesem unterforum mod. so ein unfall passiert mir jeden monat einmal, fürchte ich. 😞
    eigentlich ist das gedacht, damit ich böse links entfernen kann.



  • Ist doch überhaupt kein Problem 😉

    Hier nocheinmal:

    Ich erstelle mehrere Objekte mit new. Nun möchte ich das Objekt Array per Parameter an eine andere Klasse übergeben um von dort aus auf das Gleiche Objekt zuzugreifen.

    Hier ist ein Beispiel Code. Bei /* Objekt Parameter */ weiß ich nicht wie ich es übergeben muss, damit ich auf die Array Elemente zugreifen kann.
    Ich kann zwar das Array übergeben, ohne das der Compailer anstanden macht, aber dann kann ich nur auf das 0te Array zugreifen. Ich hoffe ihr könnt mir helfen.

    Code:

    #include <iostream>
    using namespace std;
    
    class CKlasse1
    {
      private:
            int aTest;
      public:
            void mSetTest(int pTest)
            {
                    aTest=pTest;
            }
            int mGetTest()
            {
                    return aTest;
            }
    };
    
    class CKlasse2
    {
      public:
            void mSetTest5( /* Objekt Parameter */)
            {
              // Objekt Parameter [0].mSetTest(5);
              // Objekt Parameter [1].mSetTest(5);
              // Objekt Parameter [2].mSetTest(5);
              // Objekt Parameter [3].mSetTest(5);
            }
    };
    
    CKlasse1* Klasse1[3];
    CKlasse2 Klasse2;
    
    void main()
    {
            int Eingabe=0;
    
            cout << "Es werden 4 Objekte erstellt, geben sie 4 Werte hintereinander\n" <<
                    "an, und bestätigen sie jede Eingabe mit [ENTER]:\n\n";
    
            for(int i=0; i<=3; i++)
            {
            cout << i << ": ";
            cin >> Eingabe;
            Klasse1[i] = new CKlasse1;
            Klasse1[i]->mSetTest(Eingabe);
            cout << endl;
            }
    
            cout << "\n\nAusgabe der Objekte:\n\n";
    
            for(int i=0; i<=3; i++)
            {
                    cout << i << ": ";
                    cout << Klasse1[i]->mGetTest();
                    cout << "\n";
            }
    
            Klasse2.mSetTest5(/* Objekt Parameter */);
    
            cout << endl;
    
            for(int i=0; i<=3; i++)
            {
                    cout << i << ": ";
                    cout << Klasse1[i]->mGetTest();
                    cout << "\n";
            }
    
            cin.get(); cin.get();
    }
    

    Eingabe:
    0: 3
    1: 5
    2: 23
    3: 7
    4: 1

    1. Ausgabe:
    0: 3
    1: 5
    2: 23
    3: 7
    4: 1

    2. Ausgabe:
    0: 5
    1: 5
    2: 5
    3: 5
    4: 5

    Edit: mit den 3 Objekten habe ich mich verschrieben. Soltle 4 Heißen 😉 aber hat am eigentlichen prog ja nichts geändert. Es geht mir ja nur um die Array übergabe per Parameter

    mfg FabiF



  • Edit:

    wenn ich es so schreibe wie du vorgeschlagen hast, bekomme ich folgenden Compiler Fehler:

    parameter mismatch wanted 'CKlasse1 *', got 'CKlasse1 * *'

    und das verstehe ich nicht. Denn so habe ich es ursprübnglich auch gedacht.

    MfG FabiF



  • vielleicht so?

    void mSetTest5(CKlasse1** objParm)
            {
              objParm[0]->mSetTest(5);
    


  • Es funktioniert.
    Jetzt bin ich überrascht 😃
    Das habe ich ja noch nie gesehen - doppelt **.
    Naja man lernt immer weiter 😉
    Ich kanns mir zwar nicht erklären und würde mich über eine Erklärung freuen wieso dass so ist, aber das hat mir jetzt schonmal sehr weiter geholfen.

    Vielen Dank 😉

    MfG FabiF



  • volkard schrieb:

    drakon schrieb:

    WTF? Was läuft den hier?! Wie kann einer einen Beitrag von jemand anderem überschreiben?!

    ich bin in diesem unterforum mod. so ein unfall passiert mir jeden monat einmal, fürchte ich. 😞
    eigentlich ist das gedacht, damit ich böse links entfernen kann.

    Dachte ich mir noch und habe einen Namen gesucht, aber bin komischerweise nicht auf die Idee gekommen in "Zuletzt Bearbeitet von.." zu schauen.. 🙄

    @FabiF:
    Mit der Übergabe des Namens von einem Array, übergibst du einen Zeiger auf den Anfang des Arrays: (CKlasse1* ist der Typ + nochmal ein *, weils ein Zeiger auf den Typen ist)

    void mSetTest5( CKlasse1* * array ){...}
    

    und der Aufruf ist dann so:

    Klasse2.mSetTest5( Klasse1 );
    

Anmelden zum Antworten