C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problème spécialisation de template GCC

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
diego-olivier.fernandez-p
Guest





PostPosted: Fri Oct 14, 2005 3:56 pm    Post subject: Problème spécialisation de template GCC Reply with 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





PostPosted: Fri Oct 14, 2005 4:26 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote




<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





PostPosted: Fri Oct 14, 2005 4:27 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote



[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





PostPosted: Fri Oct 14, 2005 4:31 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote


"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





PostPosted: Fri Oct 14, 2005 4:34 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote

[email]diego-olivier.fernandez-pons (AT) cicrp (DOT) jussieu.fr[/email] writes:

Quote:
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

Back to top
Stan
Guest





PostPosted: Fri Oct 14, 2005 4:37 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote


"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





PostPosted: Fri Oct 14, 2005 4:49 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote


"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





PostPosted: Fri Oct 14, 2005 5:07 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote

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





PostPosted: Fri Oct 14, 2005 6:57 pm    Post subject: Re: Problème spécialisation de template GCC Reply with quote

[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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.