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. |