Je le modèle suivant:Problème compilation du code modèle de C
template<class Matrix>
Matrix horizontal_join (const Matrix& m1, const Matrix& m2) {
ASSERT (rows (m1) == rows (m2), "unequal number of rows");
typedef typename Matrix::value_type Scalar;
Matrix r (rows (m1), nbcol (m1) + nbcol (m2));
for (unsigned i=0; i<nbrow(m1); i++) {
for (unsigned j=0; j<nbcol(m1); j++)
r(i,j)= m1(i,j);
for (unsigned j=0; j<nbcol(m2); j++)
r(i,j+nbcol(m1))= m2(i,j);
}
return r;
}
défini dans une bibliothèque appelée "MATRDSE.m". Il est également défini une structure appelée "matrsdse" dans un fichier "matrdse.hpp" qui représente un type de matrice dense et qui a plusieurs
-constructors, par exemple matrdse (int nrRows, int nrCols, const value_type * src, ByRow())
-et des méthodes, par exemple transposer().
Je veux utiliser le modèle « de horizontal_join » dans ma fonction principale:
#include <matrdse.hpp>
#include <MATRDSE.m>
typedef matrdse<double> MxPoly;
int main{
double v[]={1,2,1,1,3,4,2,2,5,5,5,5,-2, 1,2,3,1, -2.8,-2.4,1,.2,5.8};
matrdse<double> A(4,4,v,ByRow());
std::cout<<"A="<<endl<<A<<endl;
matrdse<double> AT(A);
AT.transpose(); std::cout<<"Transpose(A)="<<endl<<AT<<endl;
MxPoly B;
B=horizontal_join<MxPoly>(A,AT);
cout<<B<<endl;
return 0;
}
Tout fonctionne très bien, jusqu'à ce que « horizontal_join » est appelé et retourné dans B. j'obtiens l'erreur de compilation suivante:
main.cpp:168: error: 'horizontal_join' was not declared in this scope
main.cpp:168: error: expected primary-expression before '>' token
Je ne comprends pas l'erreur. Comme je le vois, je ne sais pas comment appeler le modèle ..
Nous vous remercions à l'avance pour toute suggestion, madalina
Avez-vous inclus l'en-tête de ce modèle? – sharptooth
oui, j'ai, j'ai oublié de l'inclure dans la question ici.Désolé – madalina
S'il vous plaît rendre le titre de la question plus descriptif. "l'utilisation de modèles" ne donne aucune idée de ce dont il s'agit. Suggestion: "Erreur de confusion lors de l'appel de la fonction de modèle C++" – flodin