hurang  | Bonjour,
   je m'adresse à vous car j'ai un problème avec des classes que j'ai récupéré sur le CD d'un livre que j'ai acheté ("Introduction to C++ for financial engineers" by Daniel J. Duffy). Ce sont les classes de base de mon travail c'est à dire les structures de données (j'utilise des classe Vector, Array, Lattice...), malheureusement j'ai des erreurs lors de la compilation... J'ai réussi à en supprimer un certain nombre mais il m'en reste une sur laquelle j'ai un doute n'étant pas expert dans la définition de ce type de classe :
   (Il s'agit ici du code du fichier Vector.hpp)
  
  Code :
 - #ifndef Vector_hpp
 - #define Vector_hpp
 - #include "Array.cpp"
 - template <class V, class I=int, class S=FullArray<V> >
 - class Vector: public Array<V, I, S>
 - {
 - public:
 - 	// Constructors & destructor
 -              ...
 - 	// Operators
 - 	Vector<V, I, S>& operator = (const Vector<V, I, S>& source);
 - 	Vector<V, I, S> operator - () const;  // Unary minus
 - 	template <class V, class I, class S>
 - 	friend Vector<V, I, S> operator + (const Vector<V, I, S>& v,const V& a);	// Add v to every element
 - 	template <class V, class I, class S>
 - 	friend Vector<V, I, S> operator + (const V& a,	const Vector<V, I, S>& v);
 - 	template <class V, class I, class S>
 - 	friend Vector<V, I, S> operator - (const Vector<V, I, S>& v, const V& a);	// Subtract v from every element
 - 	template <class V, class I, class S>
 - 	friend Vector<V, I, S> operator - (const V& a,	const Vector<V, I, S>& v);
 - 	template <class V, class I, class S>
 - 	friend Vector<V, I, S> operator * (const Vector<V, I, S>& v, const V& a);	// Multiply every element by v
 - 	template <class V, class I, class S>
 - 	friend Vector<V, I, S> operator * (const V& a,	const Vector<V, I, S>& v);
 -              ...
 - }
 
  |  
 
   A la compilation j'obtiens les messages d'erreurs du type :
 Vector.hpp declaration of `class V'   Vector.hpp  shadows template parm `class V'     Vector.hpp declaration of `class I'   Vector.hpp  shadows template parm `class I'     Vector.hpp declaration of `class S'   Vector.hpp  shadows template parm `class S'     pour chacun des 6 opérateurs (c'est à dire 18 messages d'erreur).
   En cherchant sur Internet j'ai compris qu'il y a conflit entre le nom de ces classes dans le template des opérateurs et ceux de la première ligne (template <class V, class I=int, class S=FullArray<V> > ). Je crois donc qu'il faudrait renommer les seconds en W, J, T par exemple mais dans ce cas, dois écrire cela :
  
  Code :
 - template <class W, class J, class T>
 - 	friend Vector<W, J, T> operator + (const Vector<W, J, T>& v,const V& a);	// Add v to every element
 
  |  
 
   ou bien cela :
  
  Code :
 - template <class W, class J, class T>
 - 	friend Vector<V, I, S> operator + (const Vector<V, I, S>& v,const V& a);	// Add v to every element
 
  |  
 
   J'avoue ne pas être tout à fait au point avec ces notions. A priori je n'en ai pas besoin, c'est juste dommage que ces classes ne se compilent pas directement...
   Merci pour votre aide, bonne journée.
   Jean.    |