dynmischer Array



  • hi

    Schon wieder so eine Anfängerfrage 🙄

    Warum funktioniert das nicht?

    double *Mat;
    
    	int max_columns=0;
    	int line_counter = 0;
    	int column_counter = 0;
    
    //Hier werden line_counter und max_columns ermittelt
    
    	Mat = new double[line_counter][max_columns];
    

    Kriege bei Visual Studio folgende Fehlermeldung:

    error C2440: '=' : 'double (*)[1]' kann nicht in 'double *' konvertiert werden



  • Das ist nicht das, was du glaubst, dass es ist. 😉

    Probiers mal so:

    Mat = new double[line_counter*max_columns];
    


  • new kann nur ein eindimmensionales array allokieren d.h. du musst
    jede spalte einzeln allokieren

    double **ptr;
    
    ptr = new double *[num_rows];
    for (unsigned i = 0; i < num_rows; ++i)
        ptr[i] = new double[num_colums];
    
    // und wieder löschen
    
    for (unsigned i = 0; i < num_rows; ++i)
        delete[] ptr[i];
    delete[] ptr;
    

    oder um die c++ version zu nehmen

    #include <vector>
    
    std::vector<std::vector<double>> Mat;
    
    Mat.resize(num_rows);
    for (unsigned i = 0; i < Mat.size(); ++i)
        Mat[i].resize(num_colums);
    

    bei der C++ version brauchst du dich nicht ums löschen zu kümmern



  • Und das geht natürlich auch mit beliebig vielen Dimensionen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-211534-and-highlight-is-.html



  • Hallo nochmal

    Deine C++-Version funktioniert bei mir leider nicht.

    vector<vector<double>> Mat;
    

    Ergibt Fehlermeldung:

    error C2146: Syntaxfehler : Fehlendes ',' vor Bezeichner 'Mat'
    error C2065: 'Mat' : nichtdeklarierter Bezeichner
    error C2143: Syntaxfehler : Fehlendes '>' vor ';'



  • Das geht auch kürzer.

    #include <vector>
    
    std::vector<std::vector<double> > Mat(num_rows, std::vector<double>(num_colums));
    


  • sorry, es geth doch.



  • helferlein schrieb:

    oder um die c++ version zu nehmen

    Nur als Anmerkung: new und delete sind reines C++. Die STL ist einfach praktischer und sicherer. 😉

    pitaz schrieb:

    vector<vector<double>> Mat;
    

    Du solltest darauf achten, dass bei verschachtelten Templates die schliessenden Klammern durch einen Leerschlag getrennt sind. >> geht zwar bei gewissen Compilern, manchmal wird es aber auch als operator>> interpretiert. Deshalb > > .


Anmelden zum Antworten