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

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.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
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;
  }
 
}
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
 
#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
et voici mon erreur :

../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
je suis un peu séché.

Autre question : j'ai dans mon privaite : T ** data. Ne vaudrait-il pas mieux faire un

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
vector<vector<T> > data;
ainsi, pour une augmentation ou diminution de ma matrice, cela sera plus facile non ?

Merci bcp