j'ai donc déclaré friend l'operateur << d'ostream (voir plus bas),comme pour
une classe normale, mais ca ne marche pas, le compilateur me dit:
friend declaration class ostream & operator<<(ostream &, const A<T> &)
declares a non-template function
en me signalant la ligne marquée ***.
Je ne comprend pas le sens de ce message.
Il est vrai que la meme chose sans le template marche tres bien.
Pouvez vous me dire ce qui ne va pas ?
merci
voici un bout de mon code:
#include <iostream>
template <class T>
class A {
*** friend ostream & operator<<(ostream&,const A<T>&); ***
public : // constructeur, destructeur, methodes d'acces
private : T maData;
};
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
"Beldin" writes:
J'ai cherché dans les archives, mais ce que j'y ai trouvé n'a pas résolu mon problème.
Peux-tu dire ce que tu as trouve et pourquoi ca ne resous pas ton probleme. Je ne peux que repeter ce que j'ai dit dans les messages
et
google:
template friend group:fr.comp.lang.c++
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
J'ai cherché dans les archives, mais ce que j'y ai trouvé n'a pas
résolu mon problème.
Peux-tu dire ce que tu as trouve et pourquoi ca ne resous pas ton
probleme. Je ne peux que repeter ce que j'ai dit dans les messages
<saasua.pv.ln@news.bourguet.org>
et
<ne2voa.ra1.ln@news.bourguet.org>
google:
template friend group:fr.comp.lang.c++
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
J'ai cherché dans les archives, mais ce que j'y ai trouvé n'a pas résolu mon problème.
Peux-tu dire ce que tu as trouve et pourquoi ca ne resous pas ton probleme. Je ne peux que repeter ce que j'ai dit dans les messages
et
google:
template friend group:fr.comp.lang.c++
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
Christophe Bourez
"Beldin" wrote in message news:bdrftn$4v7$
voici un bout de mon code:
#include <iostream> template <class T> class A {
Peut-être qu'une prédéclaration de l'opérateur peut aider le compilo.
(Hors sujet: Comme tu ne mets pas les portées sur std, je suppose que tu fais un using namespace std dan ton .h J'éviterais un tel using dans un .h, ça pourrait amener tôt ou tard du name clashing par simple inclusion).
Si ton compilo est "standard compliant", essaie plutôt template<> friend std::ostream &operator<< (std::ostream &, const A<T> &);
public : // constructeur, destructeur, methodes d'acces private : T maData; };
Je ne sais pas quel compilo tu utilises, mais sache que les friends templates sont correctement supportés depuis peu. Si ma mémoire est bonne, ils n'étaient pas encore (ou mal) supportés par VC++ 6, ni par BCB5.
Christophe Bourez
"Beldin" <nouveaumail@enlevez.ces.quatre.mots.tiscali.fr> wrote in message
news:bdrftn$4v7$1@news.tiscali.fr...
voici un bout de mon code:
#include <iostream>
template <class T>
class A {
Peut-être qu'une prédéclaration de l'opérateur peut aider le compilo.
(Hors sujet:
Comme tu ne mets pas les portées sur std, je suppose que tu fais un using
namespace std dan ton .h
J'éviterais un tel using dans un .h, ça pourrait amener tôt ou tard du name
clashing par simple inclusion).
Si ton compilo est "standard compliant", essaie plutôt
template<> friend std::ostream &operator<< (std::ostream &, const A<T> &);
public : // constructeur, destructeur, methodes d'acces
private : T maData;
};
Je ne sais pas quel compilo tu utilises, mais sache que les friends
templates sont correctement supportés depuis peu.
Si ma mémoire est bonne, ils n'étaient pas encore (ou mal) supportés par
VC++ 6, ni par BCB5.
(Hors sujet: Comme tu ne mets pas les portées sur std, je suppose que tu fais un using namespace std dan ton .h J'éviterais un tel using dans un .h, ça pourrait amener tôt ou tard du name clashing par simple inclusion).
Si ton compilo est "standard compliant", essaie plutôt template<> friend std::ostream &operator<< (std::ostream &, const A<T> &);
public : // constructeur, destructeur, methodes d'acces private : T maData; };
Je ne sais pas quel compilo tu utilises, mais sache que les friends templates sont correctement supportés depuis peu. Si ma mémoire est bonne, ils n'étaient pas encore (ou mal) supportés par VC++ 6, ni par BCB5.
Christophe Bourez
Christophe Bourez
"Christophe Bourez" wrote in message news:bdrjbp$qnv$
"Beldin" wrote in message news:bdrftn$4v7$
voici un bout de mon code:
#include <iostream> template <class T> class A {
Peut-être qu'une prédéclaration de l'opérateur peut aider le compilo.
(Hors sujet: Comme tu ne mets pas les portées sur std, je suppose que tu fais un using namespace std dan ton .h J'éviterais un tel using dans un .h, ça pourrait amener tôt ou tard du name
clashing par simple inclusion).
Si ton compilo est "standard compliant", essaie plutôt template<> friend std::ostream &operator<< (std::ostream &, const A<T> &);
public : // constructeur, destructeur, methodes d'acces private : T maData; };
Je ne sais pas quel compilo tu utilises, mais sache que les friends templates sont correctement supportés depuis peu. Si ma mémoire est bonne, ils n'étaient pas encore (ou mal) supportés par VC++ 6, ni par BCB5.
Christophe Bourez
"Christophe Bourez" <swing@chrisbee.be> wrote in message
news:bdrjbp$qnv$1@news.brutele.be...
"Beldin" <nouveaumail@enlevez.ces.quatre.mots.tiscali.fr> wrote in message
news:bdrftn$4v7$1@news.tiscali.fr...
voici un bout de mon code:
#include <iostream>
template <class T>
class A {
Peut-être qu'une prédéclaration de l'opérateur peut aider le compilo.
(Hors sujet:
Comme tu ne mets pas les portées sur std, je suppose que tu fais un using
namespace std dan ton .h
J'éviterais un tel using dans un .h, ça pourrait amener tôt ou tard du
name
clashing par simple inclusion).
Si ton compilo est "standard compliant", essaie plutôt
template<> friend std::ostream &operator<< (std::ostream &, const A<T> &);
public : // constructeur, destructeur, methodes d'acces
private : T maData;
};
Je ne sais pas quel compilo tu utilises, mais sache que les friends
templates sont correctement supportés depuis peu.
Si ma mémoire est bonne, ils n'étaient pas encore (ou mal) supportés par
VC++ 6, ni par BCB5.
(Hors sujet: Comme tu ne mets pas les portées sur std, je suppose que tu fais un using namespace std dan ton .h J'éviterais un tel using dans un .h, ça pourrait amener tôt ou tard du name
clashing par simple inclusion).
Si ton compilo est "standard compliant", essaie plutôt template<> friend std::ostream &operator<< (std::ostream &, const A<T> &);
public : // constructeur, destructeur, methodes d'acces private : T maData; };
Je ne sais pas quel compilo tu utilises, mais sache que les friends templates sont correctement supportés depuis peu. Si ma mémoire est bonne, ils n'étaient pas encore (ou mal) supportés par VC++ 6, ni par BCB5.
Christophe Bourez
Beldin
ok merci a vous. je pensais que le problème venait de operator<< alorsque c'est de friend qu'il s'agit.
ok merci a vous.
je pensais que le problème venait de operator<< alorsque c'est de friend
qu'il s'agit.