Bonjour,
J'ai une classe Matrice qui hérite d'une classe Tableau. Ainsi ma matrice est physiquement stocké comme un tableau à une dimension.
Je voudrais lors de l'instanciation d'un objet matrice créer un tableau de M objet Ligne, désigant directement via un simple pointeur le premier élément de chaque ligne.
Voici le code que j'ai. Je ne vois vraiment pas où est l'erreur! j'obtiens une bus error lorsque j'essaie d'accèder à L[i]. Donc si qqu pouvait m'éclairer!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 class Tableau { public: Tableau(int max); virtual ~Tableau(); int & element(int i); int element(int i) const; protected: int max; private: int * tab; }; Tableau::Tableau(int max) { this->max = max; tab = new int[max]; } Tableau::~Tableau() { delete [] tab; } int & Tableau::element(int i) { return tab[i]; } int Tableau::element(int i) const { return tab[i]; }C'est cette dernière fonction qui va renvoyer un bus error..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 class Matrix:public Tableau{ public: Matrix(const int M, const int N); inline int &el(int i, int j) {return Tableau::element(i*N+j);} inline int el(int i, int j) const {return Tableau::element(i*N+j);} /* ... */ private: const int M, N; Ligne * L; } Matrix::Matrix(const int M, const int N):Tableau(M*N), M(M), N(N){ L = new Ligne[M]; for(int i=0 ; i<M ; i++){ L[i].ptrlig = &el(i,0); // <-- probablement ici que ca merdouille! } } void Matrix::aflig(){ int i; for(i=0 ; i<lig() ; i++){ cout << L[i].ptrlig << " " << flush; cout << endl; } }
J'ai défini la classe Ligne ainsi mais je vois pas bien ou serait le pb ici..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Ligne{ public: Ligne(){}; virtual ~Ligne(){}; int * ptrlig; };
Si qqqu a l'aimabilité de m'aider!! Merci bcp d'avance!
Partager