Brauche Hilfe bei einer Fehlermeldung.
-
Hi,
ich schreibe gerade an einer Funktion die durch Rückauflösung das Ergebniss (Gauss) einer Dreiecksmatrix löst.
mein Code:
matrix.h
#include <iostream> #include <vector> using namespace std; struct newline{}; class P_matrix { private: vector<vector<double> > mv; vector<double> l_vektor; int index; int Determinante; public: P_matrix(void); P_matrix(int n, int m); //~matrix(void); int set_determinante(); void Zeilenumformung(); void Rueckaufloesung(); P_matrix& operator >> (const int WERT); P_matrix& operator >> (const struct newline N); P_matrix& operator += (const P_matrix &MATRIX); P_matrix& operator *= (const P_matrix &MATRIX); friend ostream & operator << (ostream & os, const P_matrix &m); friend P_matrix operator * (const P_matrix &MATRIX_A, const P_matrix &MATRIX_B); }; P_matrix operator + (const P_matrix &MATRIX_A, const P_matrix &MATRIX_B);matrix.cpp
#include <iostream> #include <vector> #include "Matrix.h" using namespace std; //// Standard-Konstruktor der Klasse P_matrix ////////////////////////////////// P_matrix::P_matrix(void) { mv.push_back(vector<double>()); index=0; } void P_matrix::Zeilenumformung() { int k=0; int n = mv.size(); double c; //Faktor durch den geteilt wird. int i; for (k=0; k<n-1; k++){ //c_ik= a_ik / a_kk // k: 1...n-1; Elinationsstufe for (i=1; (i+k)<n; i++) //i: 1...n-1; Zeile { c=mv[i+k][k]/mv[k][k]; for (int j=0; j<mv[i].size(); j++) //j: 1...n(spalten); Spalte { mv[i+k][j]=mv[i+k][j]-(mv[k][j]*c); //0 erzeugen durch Subtraktion der aktuellen Zeile mal den Faktor c } } } } void P_matrix::Rueckaufloesung(){ int n= mv.size(); vector<double> erg_vec; double hilf_var=0.0; for(int a=0; a<n; a++) erg_vec.push_back(0.0); for(int i=n; i>0; i--) { for (int j=0; j<mv[j].size();j++) { if(i!=j) hilf_var+=mv[i][j]*erg_vec[0][j]; } erg_vec[0][i]=(mv[i][mv[i].size()]-hilf_var)/mv[i][i]; } } void P_matrix::Zeilenumformung() { int k=0; int n = mv.size(); double c; //Faktor durch den geteilt wird. int i; for (k=0; k<n-1; k++){ //c_ik= a_ik / a_kk // k: 1...n-1; Elinationsstufe for (i=1; (i+k)<n; i++) //i: 1...n-1; Zeile { c=mv[i+k][k]/mv[k][k]; for (int j=0; j<mv[i].size(); j++) //j: 1...n(spalten); Spalte { mv[i+k][j]=mv[i+k][j]-(mv[k][j]*c); //0 erzeugen durch Subtraktion der aktuellen Zeile mal den Faktor c } } } } void P_matrix::Rueckaufloesung(){ int n= mv.size(); vector<double> erg_vec; double hilf_var=0.0; for(int a=0; a<n; a++) erg_vec.push_back(0.0); for(int i=n; i>0; i--) { for (int j=0; j<mv[j].size();j++) { if(i!=j) hilf_var+=mv[i][j]*erg_vec[0][j]; //HIER } erg_vec[0][i]=(mv[i][mv[i].size()]-hilf_var)/mv[i][i]; //HIER } }Dabei bekomme ich jetzt aber immer folgende Fehlermeldung:
invalid types `double[int]' for array subscriptDie stellen sind im Quelltext mit 'HIER' markiert.
mfg
-
vector<double> erg_vec;ist ein eindimensales Array:)
du greifst aber auf 2 Dimensioen zu
erg_vec[0][i]mach es so wie du es auch überall emach hast;)
vector<vector<double> > erg_vec
-
Oh damn, das ist mir ja gar nicht aufgefallen
.Vielen Dank für den Hinweis, jetzt funktionierts.
-
ja andere augen sehen oftmals mehr
