Konstruktor array-Pointer übergeben



  • Hi,

    funktioniert so etwas

    class A{
    private:
        double* m_i[199];
    public:
        A(double* i[199]){
            this->m_i = i;
        }
    };
    
    class B{
    public:
        B(){
            double t[199]
            A *a = new A(&t);
        }
    };
    

    Wie kann ich so etwas realisieren?Also einen Array Pointer an die Klasse A übergeben.
    Danke!



  • Was du da übergibst ist ein Array von Pointern. Wenn du allerdings einfach einen Pointer nimmst, kannst du das Array direkt übergeben, da Arrays bei Übergaben an Funktionen "zerfallen" zu einem Pointer auf das erste Element. Wenn du in A allerdings eine Kopie des Arrays speichern willst, musst du das dann mehr oder weniger Elementweise machen (für die doubles ginge auch memcpy). Das ist aber alles sehr C-mäßig, reichlich unsicher und eklig zu handhaben.
    Was du suchst sind Container, in deinem Fall entweder std::array oder std::vector.



  • Nein ich möchte keine Kopie haben sondern wirklich den Pointer. Also reicht es aus einfach Index 0 mitzugeben?

    Danke dir.



  • Beobachter01 schrieb:

    Also reicht es aus einfach Index 0 mitzugeben?

    Nein, wie gesagt. Google mal nach "Array to pointer decay"

    class A{
    private:
        double* m_i;
    public:
        A(double* i){
            this->m_i = i;
        }
    };
    
    class B{
    public:
        B(){
            double t[199]
            A *a = new A(t);
        }
    };
    

    Sicher ist allerdings wie gesagt was anderes - vor allem wegen des Pointers auf das lokale Array im Ctor von B. Der Pointer wird sofort ungültig! Schau dir mal folgendes an:

    class A{
        typedef std::vector<double> Array; //Moeglichkeit 1
        std::array<double, 199> Array;     //Moeglichkeit 2
        Array& m_i;
    public:
        A(Array& i) : m_i(i) {
        }
    };
    
    class B{
    public:
        std::array<double, 199> t;
        B(){
            A *a = new A(t);
        }
    };
    

Anmelden zum Antworten