Dynamisches Multi-Array global verwenden



  • Hallo,

    ich stehe vor einem Problem, welches ich aktuell einfach nicht lösen kann.

    Ich habe folgende Klasse definiert

    class Matrix
    {
    public: 
    
    struct Matrixeintrag{
    int A;
    int B;
    }
    
    Matrix(const int id, int row, int col);
    ~Matrix()
    
    int getEintrag(int row, int col)
    }
    

    Funktionen:

    Matrix::(const int id, int row, int col)
    {
    boost::multi_array<Matrixeintrag,2> ErstellteMatrix(boost::extents[row][col]);
    }
    
    Matrix::getEintrag(int row, int col)
    {
     // Hier soll multi array ausgelesen werden
    }
    

    int main()

    Matrix* neueMatrix=new Matrix(5,4)
    WertABFRAGE  = neueMatrix->getEintrag(1,3); // Pseudo
    

    Mein Problem: Wie stelle ich die ErstellteMatrix, dessen größe in der Laufzeit festgelegt wird für andere Funktionen, wie z.B. getEintrag in einer Klasse zur Verfügung? Da das multi_Array lokal definiert wurde ist der Zugriff darauf nicht möglich. Eine globale Hilfsvariable wiederrum wäre nicht in der Lage dynamisch dieselbe größe zu erhalten.

    Diverse Pointerversuche habe ich hinter mir und im boost reference finde ich dazu leider nichts. Auf boost bin ich leider aus div. Gründen angewiesen.

    Viele Grüße und vielen Dank für jeden Hinweis


  • Mod

    Mach es doch einen Member der Matrixklasse. Wozu ist die Klasse sonst da?



  • Die Größe der Matrix muss doch aber bei Aufruf des Konstruktors festgelegt werden. Wie also als Variable irgendwo ablegen, wenn die Größe vor Aufruf des Konstruktors unbekannt ist?



  • Fehlt dir das Stichwort Initialisierungsliste?

    class Matrix
    {
      boost::multi_array<Matrixeintrag,2> matrix;
    
      // ...
    };
    
    Matrix::Matrix(const int id, int row, int col)
        : matrix(boost::extents[row][col]) // <- Initialisierungsliste
    {
    }
    


  • Th69 schrieb:

    Fehlt dir das Stichwort Initialisierungsliste?

    class Matrix
    {
      boost::multi_array<Matrixeintrag,2> matrix;
    
      // ...
    };
    
    Matrix::Matrix(const int id, int row, int col)
        : matrix(boost::extents[row][col]) // <- Initialisierungsliste
    {
    }
    

    Diese Variante erzeugt bei mir den Fehler: "matrix ist kein nicht statischer Datenmember bzw. nicht statische Basisklasse von..."...



  • g2033 schrieb:

    Th69 schrieb:

    Fehlt dir das Stichwort Initialisierungsliste?

    class Matrix
    {
      boost::multi_array<Matrixeintrag,2> matrix;
    
      // ...
    };
    
    Matrix::Matrix(const int id, int row, int col)
        : matrix(boost::extents[row][col]) // <- Initialisierungsliste
    {
    }
    

    Diese Variante erzeugt bei mir den Fehler: "matrix ist kein nicht statischer Datenmember bzw. nicht statische Basisklasse von..."...

    Fehler selbst gefunden, hatte die Zuweisung von Standardparametern in der Header vergessen


Anmelden zum Antworten