Mit Suche nichts gefunden: Konstante Referenz auf ein Array zurückliefern



  • fyi: arrays werden in c++ per reference übergeben. sprich du kannst einfach mit normalen zeigern arbeiten, womit du dir dann einiges an komplizierter syntax sparst. (falls dir das was hilft)



  • Wie gesagt ich bekomms nicht hin (und hab gerade schon die gesamte andere Arbeit erledigt die noch anstand), ich kann nicht weitermachen 😃

    Es wäre sehr nett wenn mir da eben jemand hilft.



  • Bei dem eindimensionalen Array hab ich folgendes versucht (vielleicht seht ihr ja was falsch ist?):

    In der Klasse

    inline const unsigned int* GetArray(){ return((&Array)[20]); };
    

    Die Zuweisung

    const unsigned int *array = Klasse->GetArray();
    

    Die Verwendung:

    for(int i=0; i<20; i++)
    			 cout<<array[i]<<endl;
    

    Und hier stürzt das Programm schon bei i=0 ab.



  • class myClass
    {
    private:
        int array[10];
    public:
        const int *getArray()
        {
            return static_cast<const int*>(array);
        }
    };
    
    myClass inst;
    const int *array = inst.getArray();
    

    beantwortet das deine frage?



  • Ja, vielen Dank. Aber es wirft eine neue Frage auf:

    Ich weiß was static_cast macht, aber nicht wie ich dein Beispiel jetzt auf zweidimensionale Arrays übertrage:

    Korbinian schrieb:

    class myClass
    {
    private:
        int array[10][10];
    public:
        const int *getArray()
        {
         // ???
        }
    };
    
    myClass inst;
    const int *array = inst.getArray();
    

    Wenn du mir da noch hilfst geb ich für heute Ruh' 🤡 😋



  • const int **getArray()
    {
        return static_cast<const int **>(array);
    }
    
    const int **array = inst.getArray();
    

    doppelte sternchen, weils ein 2dimensionales array ist(alternativ: [][]) der cast wandelt den typ um. static cast sollte hier genügen (aber das wissen hier andere besser als ich :). für andere casts siehe faq.



  • Klappt noch nicht ganz, müssen die Indexe gleich groß sein?

    inline const unsigned int** GetArray(){ return static_cast<const unsigned int**>(array); };
    

    wobei array ein

    unsigned int array[4][10];
    

    ist.

    **
    'static_cast' : 'unsigned int [4][10]' kann nicht in 'const unsigned int ** ' konvertiert werden
    **



  • hm 🙂 zugegeben, ich hab mein zeuch nicht kompiliert...
    versuchs mal einfach mit einem sternchen statt zwei. sollte eigentlich auch gehen



  • Leider nicht 😞

    'static_cast' : 'unsigned int [4][10]' kann nicht in 'const unsigned int *' konvertiert werden
    


  • Korbinian schrieb:

    doppelte sternchen, weils ein 2dimensionales array ist

    Es gibt keine zweidimensionalen Arrays in C++, es gibt nur untereinander inkompatible Varianten, sie zu simulieren.



  • hm, dann fällt mir nur noch ein, ein 1dimensionales zu nehmen, und entsprechend die indexoperation selber vorzunehmen, á la [X*x + y]


Anmelden zum Antworten