Friend declaration error dans une classe Set

Friend declaration error dans une classe Set - C++ - Programmation

Marsh Posté le 26-03-2008 à 11:00:02    

Bonjour,
 
désolé de vous dérangez avec un problème que je maitrise assez mal.
Je travaille sur un modèle de produit financier et pour cela j'ai eut besoin d'importer des classes de structure de données depuis le CD d'un bouquin assez sérieux.
Malheureusement j'ai des erreurs de compilation et certains problèmes sont un peu trop techniques pour moi, j'ai beau cherché sur Internet et je ne trouve pas de solution.
L'erreur en question se trouve dans un fichier nommé Set.hpp :
 

Code :
  1. // Standard set operations from High School
  2. friend Set<V> Intersection(const Set<V>& s1, const Set<V>& s2);
  3. Set<V> operator ^ (const Set<V>& s2); // Intersection
  4. friend Set<V> Union(const Set<V>& s1, const Set<V>& s2);
  5. Set<V> operator + (const Set<V>& s2); // Union
  6. friend Set<V> Difference(const Set<V>& s1, const Set<V>& s2);
  7. Set<V> operator - (const Set<V>& s2); // Difference
  8. friend Set<V> SymmetricDifference(const Set<V>& s1, const Set<V>& s2);
  9. Set<V> operator % (const Set<V>& s2); // Symmetric Difference


 
Comme vous le voyez l'auteur définit certains opérateurs mais ce morceau de code produit des erreurs du type :
 
[Warning] friend declaration `Set<V> Intersection(const Set<V>&, const Set<V>& )' declares a non-template function  
[Warning] (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning  
 
Premièrement, je ne comprend pas ce message et je ne vois pas où je dois ajouter le <> en question (j'ai testé plusieurs possibilité mais ça ne fonctionne pas).
Deuxièmement, j'ai une autre erreur dans le même fichier et dans le .cpp associé, je me demande si c'est lié à ce problème ou non :
 

Code :
  1. Set<pair<V, V2> > result;
  2. set<V>::const_iterator iOuter;
  3. set<V2>::const_iterator iInner;


 
Ces définitions d'itérateurs dans le .hpp produisent le message d'erreur suivant:
In member function `Set<std::pair<V, V2> > Set<V>::CartesianProduct(const Set<V2>& )':  
expected `;' before "iOuter"  
 
J'ai les meme message d'erreur à chaque déclaration d'itérateur dans le fichier Set.cpp.
 
Merci beaucoup pour votre aide.
Bonne journée,
 
Jean.

Reply

Marsh Posté le 26-03-2008 à 11:00:02   

Reply

Marsh Posté le 26-03-2008 à 22:44:12    

encore une fois :
 

Code :
  1. Set<pair<V, V2> > result;
  2. typename set<V>::const_iterator iOuter;
  3. typename set<V2>::const_iterator iInner;


 
et c'est PAS un bouquin serieux si il te fait ecrire des fonctions friends ...

Reply

Marsh Posté le 27-03-2008 à 00:24:16    

Salut Joel,
 
merci pour ta réponse.  
Je persiste à dire que ce bouquin est sérieux, c'est autant un bouquin de finance qu'un bouquin de C++ et c'est une bonne référence dans ce domaine. Les classes importées depuis le CD n'ont sûrement pas été rédigées par l'auteur du bouquin et pour ce qui me concerne je n'ai pas besoin d'écrire des fonctions friends.
Par contre je veux bien te croire si tu dis que c'est nul et qu'il ne faut pas les utiliser. Pas trop le choix pour ma part, je n'ai pas le temps de réécrire ces classes.
 
As-tu une réponse à la première partie de ma question ?
Où dois-je placer ce fichu <> ?
 
Merci beaucoup pour ton aide, à bientôt.
 
Jean.

Reply

Marsh Posté le 27-03-2008 à 08:07:22    

de tête, c'ets loin les friends pr moi.
 

Code :
  1. friend Set<V> SymmetricDifference<>(const Set<V>& s1, const Set<V>& s2);


 
Cette syntaxe indique au compilo que l'ensemble des paramètres template sont déductibles (non pas des impôts) de la liste d'arguments.
 
Je mets pas en doute la qualité de la partie finance, mais quand je vois des codes comme çà, ca me fait dire que le gars qui a ecrit les sources est un débile fini.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed