Bonjour à tous,
je traville sur une bibliothèque compilée avec le gcc4.0 et les version précédentes. je veux insérer les directives openmp dans le code source de cette bibliothèque. Donc j'ai compilé le code avec la version gcc4.4 puisque openmp n'est reconnu qu'a partir de la version 4.2, mais dans ce cas j'obtient bcp d'erreurs surtout au niveau de la définiton des templates. Donc je savoir qu'elle est la différence entre ces versions du gcc et y a il un moyen qui assure le portage des programmes compilés avec les anciennes versions vers les versions récentes du gcc. Voici ci dessous une partie du code et les erreurs obtenues lors de la compilation.
ifndef _PAT_FAM
#define _PAT_FAM
#include <iostream>
#include <vector>
template<typename P, template<typename T> class ST>
class pat_fam;
template<typename P, template<typename T> class ST>
std::ostream& operator<< (std::ostream&, const pat_fam<P, ST>&);
template<typename P, template<typename T> class ST=std::vector>
class pat_fam: public ST<P*>
{
public:
typedef typename ST<P*>::iterator IT;
typedef typename ST<P*>::const_iterator CONST_IT;
friend std::ostream& operator<< <>(std::ostream&, const pat_fam<P, ST>&);
};
template<class P>
std::ostream& operator<< (std::ostream& ostr, const pat_fam<P, std::vector>& pats)
{
typename pat_fam<P, std::vector>::CONST_IT it;
for(it=pats.begin(); it!=pats.end(); it++)
ostr<<*it<<std::endl;
return ostr;
}
#endif
pat_fam.h:57: erreur: type/value mismatch at argument 2 in template parameter list for ‘template<class P, template<class T> class ST> class pat_fam’
pat_fam.h:57: erreur: expected a template of type ‘template<class T> class ST’, got ‘template<class _Tp, class _Alloc> class std::vector’
pat_fam.h: In function ‘std::ostream& operator<<(std::ostream&, const int&)’:
pat_fam.h:59: erreur: type/value mismatch at argument 2 in template parameter list for ‘template<class P, template<class T> class ST> class pat_fam’
pat_fam.h:59: erreur: expected a template of type ‘template<class T> class ST’, got ‘template<class _Tp, class _Alloc> class std::vector’
pat_fam.h:59: erreur: invalid type in declaration before ‘;’ token
pat_fam.h:60: erreur: request for member ‘begin’ in ‘pats’, which is of non-class type ‘const int’
pat_fam.h:60: erreur: request for member ‘end’ in ‘pats’, which is of non-class type ‘const int’
pat_fam.h:61: erreur: invalid type argument of ‘unary *’
Le même code est compilé sans erreur avec g++3.4
Merci d'avance.
Partager