 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
diego-olivier.fernandez-p Guest
|
Posted: Fri Oct 14, 2005 3:56 pm Post subject: Problème spécialisation de template GCC |
|
|
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
|
|
| Back to top |
|
 |
Stan Guest
|
Posted: Fri Oct 14, 2005 4:26 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
<diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr> a écrit dans le message de
news: [email]1129305372.565192.27390 (AT) z14g2000cwz (DOT) googlegroups.com[/email]...
Bonjour,
| Quote: | 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
|
|
| Back to top |
|
 |
Alain Cabiran Guest
|
Posted: Fri Oct 14, 2005 4:27 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
[email]diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr[/email] a écrit :
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.
| Quote: | 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
|
|
|
| Back to top |
|
 |
Stan Guest
|
Posted: Fri Oct 14, 2005 4:31 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
"Stan" <none (AT) none (DOT) fr> a écrit dans le message de news:
434fdc3a$0$1730$8fcfb975 (AT) news (DOT) wanadoo.fr...
| Quote: |
[email]diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr[/email]> a écrit dans le message de
news: [email]1129305372.565192.27390 (AT) z14g2000cwz (DOT) googlegroups.com[/email]...
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
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
Stan Guest
|
Posted: Fri Oct 14, 2005 4:37 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
"Alain Cabiran" <pasdespam (AT) club-internet (DOT) fr> a écrit dans le message de
news: 434fdc5d$0$461$7a628cd7 (AT) news (DOT) club-internet.fr...
| Quote: | diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr a écrit :
Bonjour,
je suis pas spécialiste du c++ mais ça serait pas plutôt :
[...] |
| Quote: | 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
|
|
| Back to top |
|
 |
Stan Guest
|
Posted: Fri Oct 14, 2005 4:49 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
"Jean-Marc Bourguet" <jm (AT) bourguet (DOT) org> a écrit dans le message de news:
[email]pxb1x2ooy5w.fsf (AT) news (DOT) bourguet.org[/email]...
| Quote: | diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr 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
|
|
| Back to top |
|
 |
diego-olivier.fernandez-p Guest
|
Posted: Fri Oct 14, 2005 5:07 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
Bonjour,
| Quote: | 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
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Fri Oct 14, 2005 6:57 pm Post subject: Re: Problème spécialisation de template GCC |
|
|
[email]diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr[/email] writes:
| Quote: | 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
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|