j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream>
#include<cstdlib>
template<typename T>
struct Id
{
typedef T type;
};
template<typename T>
void f(typename Id<T>::type a)
{
using namespace std;
cout << a << endl;
}
int main(void)
{
f(12.);
f(12);
return EXIT_SUCCESS;
}
gcc me donne le message d'erreur suivant :
Test.cxx:26: error: no matching function for call to f(double)
Test.cxx:27: error: no matching function for call to f(int)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
Helfer Thomas writes:
Bonjour,
j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream> #include<cstdlib>
template<typename T> struct Id { typedef T type; };
template<typename T> void f(typename Id<T>::type a) { using namespace std; cout << a << endl; }
int main(void) { f(12.); f(12); return EXIT_SUCCESS; }
gcc me donne le message d'erreur suivant : Test.cxx:26: error: no matching function for call to f(double) Test.cxx:27: error: no matching function for call to f(int)
Est-ce normal ?
Oui. Il n'est pas possible de deduire le parametre template en suivant les regles du C++. Tu peux les specifier toi-meme:
f<double>(12.); f<int>(12);
A+
-- Jean-Marc
Helfer Thomas <helferthomas@free.fr> writes:
Bonjour,
j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream>
#include<cstdlib>
template<typename T>
struct Id
{
typedef T type;
};
template<typename T>
void f(typename Id<T>::type a)
{
using namespace std;
cout << a << endl;
}
int main(void)
{
f(12.);
f(12);
return EXIT_SUCCESS;
}
gcc me donne le message d'erreur suivant :
Test.cxx:26: error: no matching function for call to f(double)
Test.cxx:27: error: no matching function for call to f(int)
Est-ce normal ?
Oui. Il n'est pas possible de deduire le parametre template en
suivant les regles du C++. Tu peux les specifier toi-meme:
j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream> #include<cstdlib>
template<typename T> struct Id { typedef T type; };
template<typename T> void f(typename Id<T>::type a) { using namespace std; cout << a << endl; }
int main(void) { f(12.); f(12); return EXIT_SUCCESS; }
gcc me donne le message d'erreur suivant : Test.cxx:26: error: no matching function for call to f(double) Test.cxx:27: error: no matching function for call to f(int)
Est-ce normal ?
Oui. Il n'est pas possible de deduire le parametre template en suivant les regles du C++. Tu peux les specifier toi-meme:
f<double>(12.); f<int>(12);
A+
-- Jean-Marc
Gabriel Dos Reis
Helfer Thomas writes:
| Bonjour, | | j'aimerai comprendre pourquoi le code suivant ne compile pas : | | #include<iostream> | #include<cstdlib> | | template<typename T> | struct Id | { | typedef T type; | }; | | template<typename T> | void f(typename Id<T>::type a) ^^^^
Salut Thomas. Laurent a posé une question similaire récemment : le paramètre de template « T » apparait dans un contexte non-déductible. Donc l'appel « ordinaire »
[...]
| f(12.);
ne peut pas marcher -- il te faudrait explicitement spécifier l'argument de template « f<double>(12.) ».
-- Gaby
Helfer Thomas <helferthomas@free.fr> writes:
| Bonjour,
|
| j'aimerai comprendre pourquoi le code suivant ne compile pas :
|
| #include<iostream>
| #include<cstdlib>
|
| template<typename T>
| struct Id
| {
| typedef T type;
| };
|
| template<typename T>
| void f(typename Id<T>::type a)
^^^^
Salut Thomas. Laurent a posé une question similaire récemment : le
paramètre de template « T » apparait dans un contexte non-déductible.
Donc l'appel « ordinaire »
[...]
| f(12.);
ne peut pas marcher -- il te faudrait explicitement spécifier
l'argument de template « f<double>(12.) ».
| Bonjour, | | j'aimerai comprendre pourquoi le code suivant ne compile pas : | | #include<iostream> | #include<cstdlib> | | template<typename T> | struct Id | { | typedef T type; | }; | | template<typename T> | void f(typename Id<T>::type a) ^^^^
Salut Thomas. Laurent a posé une question similaire récemment : le paramètre de template « T » apparait dans un contexte non-déductible. Donc l'appel « ordinaire »
[...]
| f(12.);
ne peut pas marcher -- il te faudrait explicitement spécifier l'argument de template « f<double>(12.) ».
-- Gaby
Helfer Thomas
Merci pour vos réponses.
Le Tue, 07 Nov 2006 09:22:04 +0100, Helfer Thomas a écrit :
Bonjour,
j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream> #include<cstdlib>
template<typename T> struct Id { typedef T type; };
template<typename T> void f(typename Id<T>::type a) { using namespace std; cout << a << endl; }
int main(void) { f(12.); f(12); return EXIT_SUCCESS; }
gcc me donne le message d'erreur suivant : Test.cxx:26: error: no matching function for call to f(double) Test.cxx:27: error: no matching function for call to f(int)
Est-ce normal ?
Cordialement,
Helfer Thomas
Merci pour vos réponses.
Le Tue, 07 Nov 2006 09:22:04 +0100, Helfer Thomas a écrit :
Bonjour,
j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream>
#include<cstdlib>
template<typename T>
struct Id
{
typedef T type;
};
template<typename T>
void f(typename Id<T>::type a)
{
using namespace std;
cout << a << endl;
}
int main(void)
{
f(12.);
f(12);
return EXIT_SUCCESS;
}
gcc me donne le message d'erreur suivant :
Test.cxx:26: error: no matching function for call to f(double)
Test.cxx:27: error: no matching function for call to f(int)
Le Tue, 07 Nov 2006 09:22:04 +0100, Helfer Thomas a écrit :
Bonjour,
j'aimerai comprendre pourquoi le code suivant ne compile pas :
#include<iostream> #include<cstdlib>
template<typename T> struct Id { typedef T type; };
template<typename T> void f(typename Id<T>::type a) { using namespace std; cout << a << endl; }
int main(void) { f(12.); f(12); return EXIT_SUCCESS; }
gcc me donne le message d'erreur suivant : Test.cxx:26: error: no matching function for call to f(double) Test.cxx:27: error: no matching function for call to f(int)