Je n'arrive pas avec GCC =E0 compiler des sp=E9cialisation de template
avec des fonctions d=E9clar=E9es en dehors du prototype (mais dans le
m=EAme fichier), alors qu'avec les fonctions d=E9velopp=E9es in-line, tout
semble marcher. Voil=E0 un code (trouv=E9 sur le web) qui ne compile pas
sous GCC 3.4.1
i) Quelqu'un a une explication ?
ii) Existe t-il une fa=E7on de contourner le probl=E8me ?
Diego Olivier
template <class T> class pair {
T value1, value2;
public:
pair (T first, T second)
{value1=3Dfirst; value2=3Dsecond;}
T module () {return 0;}
};
template <> class pair <int> {
int value1, value2;
public:
pair (int first, int second)
{value1=3Dfirst; value2=3Dsecond;}
int module ();
};
template <> int pair<int>::module() {
return value1%value2;
}
int main(int argc, char** argv) {
return 0;
}
dofpons@mymachine ~/code/test $ make
/usr/bin/g++ -c -g -Wall -I/nfs/home/dofpons/code/test
-I/nfs/home/dofpons/code/test
/nfs/home/dofpons/code/test/test.cpp -o /usr/progs/test/test.o
/nfs/home/dofpons/code/test/test.cpp:22: error: template-id `module<>'
for
`int pair<int>::module()' does not match any template declaration
/nfs/home/dofpons/code/test/test.cpp:22: error: invalid function
declaration
make: *** [/usr/progs/test/test.o] Erreur 1
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
Stan
a écrit dans le message de news: Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template avec des fonctions déclarées en dehors du prototype (mais dans le même fichier), alors qu'avec les fonctions développées in-line, tout semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas sous GCC 3.4.1
Que contient le make ? As-tu essayé de faire : g++ test.cpp -o test ( si le source contenant le main s'appelle test ) ? D'ailleurs, est-ce que l'exemple que tu as donné est bien dans le même source ?
Car l'exemple compile très bien, même sur gcc 2.96.
-- -Stan
<diego-olivier.fernandez-pons@cicrp.jussieu.fr> a écrit dans le message de
news: 1129305372.565192.27390@z14g2000cwz.googlegroups.com...
Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template
avec des fonctions déclarées en dehors du prototype (mais dans le
même fichier), alors qu'avec les fonctions développées in-line, tout
semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas
sous GCC 3.4.1
Que contient le make ?
As-tu essayé de faire : g++ test.cpp -o test
( si le source contenant le main s'appelle test ) ?
D'ailleurs, est-ce que l'exemple que tu as donné est bien dans le même
source ?
Car l'exemple compile très bien, même sur gcc 2.96.
Je n'arrive pas avec GCC à compiler des spécialisation de template avec des fonctions déclarées en dehors du prototype (mais dans le même fichier), alors qu'avec les fonctions développées in-line, tout semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas sous GCC 3.4.1
Que contient le make ? As-tu essayé de faire : g++ test.cpp -o test ( si le source contenant le main s'appelle test ) ? D'ailleurs, est-ce que l'exemple que tu as donné est bien dans le même source ?
Car l'exemple compile très bien, même sur gcc 2.96.
-- -Stan
Alain Cabiran
Bonjour,
je suis pas spécialiste du c++ mais ça serait pas plutôt :
template <class T> class pair { protected: T value1, value2; public: pair() { }; // juste au cas où ... pair (T first, T second) {value1=first; value2=second;} T module () {return 0;} };
class IntPair : public pair<int> { public: int module(); };
int IntPair::module() { return value1 % value 2; }
???
hope this helps,
Alain C.
Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template avec des fonctions déclarées en dehors du prototype (mais dans le même fichier), alors qu'avec les fonctions développées in-line, tout semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas sous GCC 3.4.1
i) Quelqu'un a une explication ? ii) Existe t-il une façon de contourner le problème ?
Diego Olivier
template <class T> class pair { T value1, value2; public: pair (T first, T second) {value1=first; value2=second;} T module () {return 0;} };
template <> class pair <int> { int value1, value2; public: pair (int first, int second) {value1=first; value2=second;} int module (); };
template <> int pair<int>::module() { return value1%value2; }
int main(int argc, char** argv) {
return 0;
}
~/code/test $ make /usr/bin/g++ -c -g -Wall -I/nfs/home/dofpons/code/test -I/nfs/home/dofpons/code/test /nfs/home/dofpons/code/test/test.cpp -o /usr/progs/test/test.o /nfs/home/dofpons/code/test/test.cpp:22: error: template-id `module<>' for `int pair<int>::module()' does not match any template declaration /nfs/home/dofpons/code/test/test.cpp:22: error: invalid function declaration make: *** [/usr/progs/test/test.o] Erreur 1
Bonjour,
je suis pas spécialiste du c++ mais ça serait pas plutôt :
template <class T> class pair {
protected:
T value1, value2;
public:
pair() { }; // juste au cas où ...
pair (T first, T second)
{value1=first; value2=second;}
T module () {return 0;}
};
class IntPair : public pair<int>
{
public:
int module();
};
int IntPair::module()
{
return value1 % value 2;
}
???
hope this helps,
Alain C.
Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template
avec des fonctions déclarées en dehors du prototype (mais dans le
même fichier), alors qu'avec les fonctions développées in-line, tout
semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas
sous GCC 3.4.1
i) Quelqu'un a une explication ?
ii) Existe t-il une façon de contourner le problème ?
Diego Olivier
template <class T> class pair {
T value1, value2;
public:
pair (T first, T second)
{value1=first; value2=second;}
T module () {return 0;}
};
template <> class pair <int> {
int value1, value2;
public:
pair (int first, int second)
{value1=first; value2=second;}
int module ();
};
template <> int pair<int>::module() {
return value1%value2;
}
int main(int argc, char** argv) {
return 0;
}
dofpons@mymachine ~/code/test $ make
/usr/bin/g++ -c -g -Wall -I/nfs/home/dofpons/code/test
-I/nfs/home/dofpons/code/test
/nfs/home/dofpons/code/test/test.cpp -o /usr/progs/test/test.o
/nfs/home/dofpons/code/test/test.cpp:22: error: template-id `module<>'
for
`int pair<int>::module()' does not match any template declaration
/nfs/home/dofpons/code/test/test.cpp:22: error: invalid function
declaration
make: *** [/usr/progs/test/test.o] Erreur 1
je suis pas spécialiste du c++ mais ça serait pas plutôt :
template <class T> class pair { protected: T value1, value2; public: pair() { }; // juste au cas où ... pair (T first, T second) {value1=first; value2=second;} T module () {return 0;} };
class IntPair : public pair<int> { public: int module(); };
int IntPair::module() { return value1 % value 2; }
???
hope this helps,
Alain C.
Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template avec des fonctions déclarées en dehors du prototype (mais dans le même fichier), alors qu'avec les fonctions développées in-line, tout semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas sous GCC 3.4.1
i) Quelqu'un a une explication ? ii) Existe t-il une façon de contourner le problème ?
Diego Olivier
template <class T> class pair { T value1, value2; public: pair (T first, T second) {value1=first; value2=second;} T module () {return 0;} };
template <> class pair <int> { int value1, value2; public: pair (int first, int second) {value1=first; value2=second;} int module (); };
template <> int pair<int>::module() { return value1%value2; }
int main(int argc, char** argv) {
return 0;
}
~/code/test $ make /usr/bin/g++ -c -g -Wall -I/nfs/home/dofpons/code/test -I/nfs/home/dofpons/code/test /nfs/home/dofpons/code/test/test.cpp -o /usr/progs/test/test.o /nfs/home/dofpons/code/test/test.cpp:22: error: template-id `module<>' for `int pair<int>::module()' does not match any template declaration /nfs/home/dofpons/code/test/test.cpp:22: error: invalid function declaration make: *** [/usr/progs/test/test.o] Erreur 1
Stan
"Stan" a écrit dans le message de news: 434fdc3a$0$1730$
a écrit dans le message de news: Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template avec des fonctions déclarées en dehors du prototype (mais dans le même fichier), alors qu'avec les fonctions développées in-line, tout semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas sous GCC 3.4.1
Que contient le make ? As-tu essayé de faire : g++ test.cpp -o test ( si le source contenant le main s'appelle test ) ? D'ailleurs, est-ce que l'exemple que tu as donné est bien dans le même source ?
Car l'exemple compile très bien, même sur gcc 2.96.
-- -Stan
Cependant, la spécialisation contient la déclaration de module sans être défini... ( int module( ) { return 0; } .
-- -Stan
"Stan" <none@none.fr> a écrit dans le message de news:
434fdc3a$0$1730$8fcfb975@news.wanadoo.fr...
<diego-olivier.fernandez-pons@cicrp.jussieu.fr> a écrit dans le message de
news: 1129305372.565192.27390@z14g2000cwz.googlegroups.com...
Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template
avec des fonctions déclarées en dehors du prototype (mais dans le
même fichier), alors qu'avec les fonctions développées in-line, tout
semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas
sous GCC 3.4.1
Que contient le make ?
As-tu essayé de faire : g++ test.cpp -o test
( si le source contenant le main s'appelle test ) ?
D'ailleurs, est-ce que l'exemple que tu as donné est bien dans le même
source ?
Car l'exemple compile très bien, même sur gcc 2.96.
--
-Stan
Cependant, la spécialisation contient la déclaration de module sans
être défini... ( int module( ) { return 0; } .
"Stan" a écrit dans le message de news: 434fdc3a$0$1730$
a écrit dans le message de news: Bonjour,
Je n'arrive pas avec GCC à compiler des spécialisation de template avec des fonctions déclarées en dehors du prototype (mais dans le même fichier), alors qu'avec les fonctions développées in-line, tout semble marcher. Voilà un code (trouvé sur le web) qui ne compile pas sous GCC 3.4.1
Que contient le make ? As-tu essayé de faire : g++ test.cpp -o test ( si le source contenant le main s'appelle test ) ? D'ailleurs, est-ce que l'exemple que tu as donné est bien dans le même source ?
Car l'exemple compile très bien, même sur gcc 2.96.
-- -Stan
Cependant, la spécialisation contient la déclaration de module sans être défini... ( int module( ) { return 0; } .
-- -Stan
Jean-Marc Bourguet
writes:
template <> int pair<int>::module() { return value1%value2; }
int pair<int>::module() { return value1%value2; }
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
template <> int pair<int>::module() {
return value1%value2;
}
int pair<int>::module() {
return value1%value2;
}
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
template <> int pair<int>::module() { return value1%value2; }
int pair<int>::module() { return value1%value2; }
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Stan
"Alain Cabiran" a écrit dans le message de news: 434fdc5d$0$461$
Bonjour,
je suis pas spécialiste du c++ mais ça serait pas plutôt :
[...]
int IntPair::module() { return value1 % value 2; }
???
Il y a là une belle confusion. pair<> représente une paire de types ( un ensemble de 2 types ). Il ne s'agit pas de la parité mathématique.
-- -Stan
"Alain Cabiran" <pasdespam@club-internet.fr> a écrit dans le message de
news: 434fdc5d$0$461$7a628cd7@news.club-internet.fr...
Bonjour,
je suis pas spécialiste du c++ mais ça serait pas plutôt :
[...]
int IntPair::module()
{
return value1 % value 2;
}
???
Il y a là une belle confusion.
pair<> représente une paire de types ( un ensemble de 2 types ).
Il ne s'agit pas de la parité mathématique.
"Jean-Marc Bourguet" a écrit dans le message de news:
writes:
template <> int pair<int>::module() { return value1%value2; }
int pair<int>::module() { return value1%value2; }
Effectivement, j'avais compilé sans la partie en cause... Cruelle fin de semaine :-)
-- -Stan
diego-olivier.fernandez-pons
Bonjour,
int pair<int>::module() { return value1%value2; }
Oui mais ce code que j'ai trouvé sur internet compile (d'après son auteur) sous VC++ - que je n'ai pas sous la main mais sur lequel mon code doit tourner. Je dois pouvoir m'en tirer avec des #define mais ça ne m'emballe pas particulièrement.
Et je croyais que la norme exigeait "template <>"
Et ils commencent à me casser les pieds les compilateurs à ne par respecter la norme.
Et puis Caml, au moins, contrairement à C++ ça marche partout pareil.
Diego Olivier
Bonjour,
int pair<int>::module() {
return value1%value2;
}
Oui mais ce code que j'ai trouvé sur internet compile (d'après son
auteur) sous VC++ - que je n'ai pas sous la main mais sur lequel mon
code doit tourner. Je dois pouvoir m'en tirer avec des #define mais ça
ne m'emballe pas particulièrement.
Et je croyais que la norme exigeait "template <>"
Et ils commencent à me casser les pieds les compilateurs à ne par
respecter la norme.
Et puis Caml, au moins, contrairement à C++ ça marche partout pareil.
Oui mais ce code que j'ai trouvé sur internet compile (d'après son auteur) sous VC++ - que je n'ai pas sous la main mais sur lequel mon code doit tourner. Je dois pouvoir m'en tirer avec des #define mais ça ne m'emballe pas particulièrement.
Et je croyais que la norme exigeait "template <>"
Et ils commencent à me casser les pieds les compilateurs à ne par respecter la norme.
Et puis Caml, au moins, contrairement à C++ ça marche partout pareil.
Diego Olivier
Jean-Marc Bourguet
writes:
Bonjour,
int pair<int>::module() { return value1%value2; }
Oui mais ce code que j'ai trouvé sur internet compile (d'après son auteur) sous VC++ - que je n'ai pas sous la main mais sur lequel mon code doit tourner. Je dois pouvoir m'en tirer avec des #define mais ça ne m'emballe pas particulièrement.
Et je croyais que la norme exigeait "template <>"
C'est l'inverse, la norme l'interdit.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Oui mais ce code que j'ai trouvé sur internet compile (d'après son
auteur) sous VC++ - que je n'ai pas sous la main mais sur lequel mon
code doit tourner. Je dois pouvoir m'en tirer avec des #define mais ça
ne m'emballe pas particulièrement.
Et je croyais que la norme exigeait "template <>"
C'est l'inverse, la norme l'interdit.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Oui mais ce code que j'ai trouvé sur internet compile (d'après son auteur) sous VC++ - que je n'ai pas sous la main mais sur lequel mon code doit tourner. Je dois pouvoir m'en tirer avec des #define mais ça ne m'emballe pas particulièrement.
Et je croyais que la norme exigeait "template <>"
C'est l'inverse, la norme l'interdit.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org