Bonjour, après deux ans d'abandon du C++ (pour faire du C) je me remet au C++. J'avoue que j'ai dû oublié de nombreuses choses. Je m'entraine donc à refaire une classe Matrix templatée et c'est un peu plus dur que je ne le pensais. J'ai un pb de point virgule que je n'arrive pas à résoudre. Voici mon code :
main.cpp
matrix.cpp
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 #include <iostream> //#include "matrix.h" using namespace std; int main(void) { std::cout<<"Hello World"<<std::endl; /* Matrix<double> A; Matrix<double> B(2,2,2); //cout<<B<<endl; Matrix<Matrix<double> > C(4,3,B); //cout<<C<<endl; */ return 0;//EXIT_SUCCESS; }
matrix.h
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
30
31 #include<iostream> #include "matrix.h" /* default constructor */ template<typename T> Matrix<T>::Matrix() { std::cout<<"appel du constructeur par default"<<std::endl; } //Matrix(const Matrix &); /* copy constructor */ template<typename T> Matrix<T>::Matrix(unsigned row,unsigned col,const T & d) { std::cout<<"appel du constructeur"<<std::endl; nr=row; nc=col; data=new T * [ nr ]; unsigned i,j; for(i=0;i<nr;i++) { data[i]=new T [ nc ]; if(data[i]==NULL) std::cerr<<"Error"<<std::endl; for(j=0;j<nc;++j) data[i][j]=d; } }
et voici mon erreur :
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 #ifndef MATRIX_H_PLP_20070925 #define MATRIX_H_PLP_20070925 #include<iostream> template<typename T> class Matrix { private: unsigned nr; /* number of rows */ unsigned nc; /* number of columns */ T ** data; public: Matrix(); /* default constructors */ Matrix(unsigned,unsigned, const T &); /* constructor */ } #endif
je suis un peu séché.../Sources/matrix.cpp:5: error: semicolon missing after declaration of `
Matrix<T>'
../Sources/matrix.cpp:5: error: erreur de syntaxe before `template'
make: *** [../Sources/matrix.o] Erreur 1
Autre question : j'ai dans mon privaite : T ** data. Ne vaudrait-il pas mieux faire un
ainsi, pour une augmentation ou diminution de ma matrice, cela sera plus facile non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 vector<vector<T> > data;
Merci bcp
Partager