Bonjour,
je rencontre un petit probl=E8me avec g++ 3.4.2.
Je dois compiler ce genre de code(qui n'est pas le mien) :
class Titi
{
protected :
int truc_;
public:
Titi():truc_(0){};
virtual ~Titi(){};
};
template<class T>
class Toto : public T
{
public:
void methode(void)
{
truc_++;
}
};
int main(int ac,char **av)
{
Toto<Titi> i;
i.methode();
return 0;
}
Cela compile avec g++ 3.3.4, icc 8.0 mais plus avec g++ 3.4.2 :
In file included from test.cc:1:
template.hh: In member function `void Toto<T>::methode()':
template.hh:16: erreur: =AB truc_ =BB non d=E9clar=E9 (premi=E8re utilisati=
on dans
cette fonction)
template.hh:16: erreur: (Chaque identificateur non d=E9clar=E9 est rapport=
=E9
seulement une seule fois pour la fonction dans laquelle il appara=EEt.)
Je comprend l'erreur mais s'agit-il d'un bug apparu recement dans g++ ou
alors d'un choix. S'il s'agit d'un choix existe-t-il une option pour
obtenir l'ancien comportement ?
Bien =E0 vous,
S=E9bastien
--
int main(){int j=3D1234,putchar();char t[]=3D":@abcdefghij-lmnopqrstuv"
"wxyz.\n",*i=3D"@jq:.pn.q:ibf.gd\noz.dn@ew\nlwh-i",*strchr();while(*i)
{j+=3Dstrchr(t,*i++)-t;j%=3Dsizeof t-1;putchar(t[j]);}return 0;}
Bonjour, je rencontre un petit problème avec g++ 3.4.2. Je dois compiler ce genre de code(qui n'est pas le mien) :
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
int main(int ac,char **av) { Toto<Titi> i; i.methode();
return 0; }
Cela compile avec g++ 3.3.4, icc 8.0 mais plus avec g++ 3.4.2 :
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
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
docCarcass <bigotseb@etu.utc.nospam.fr> writes:
Bonjour,
je rencontre un petit problème avec g++ 3.4.2.
Je dois compiler ce genre de code(qui n'est pas le mien) :
class Titi
{
protected :
int truc_;
public:
Titi():truc_(0){};
virtual ~Titi(){};
};
template<class T>
class Toto : public T
{
public:
void methode(void)
{
truc_++;
}
};
int main(int ac,char **av)
{
Toto<Titi> i;
i.methode();
return 0;
}
Cela compile avec g++ 3.3.4, icc 8.0 mais plus avec g++ 3.4.2 :
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
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
Bonjour, je rencontre un petit problème avec g++ 3.4.2. Je dois compiler ce genre de code(qui n'est pas le mien) :
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
int main(int ac,char **av) { Toto<Titi> i; i.methode();
return 0; }
Cela compile avec g++ 3.3.4, icc 8.0 mais plus avec g++ 3.4.2 :
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
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
Vincent Lascaux
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
Pour quelle raison ? Est ce du à l'utilisation de template ?
-- Vincent
class Titi
{
protected :
int truc_;
public:
Titi():truc_(0){};
virtual ~Titi(){};
};
template<class T>
class Toto : public T
{
public:
void methode(void)
{
truc_++;
}
};
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
Pour quelle raison ? Est ce du à l'utilisation de template ?
Pour quelle raison ? Est ce du à l'utilisation de template ?
Oui, et à la recherche de nom en deux phases. Il faut rendre le nom dépendant du modèle.
À confirmer, mes connaissances sur le sujet étant limitées.
--drkm
Christophe Lephay
docCarcass wrote:
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
En plus des réponses qui ont déjà été données, attention à ne pas terminer les déclarations de tes fonctions membre par ";" comme c'est le cas ci-dessus dans ton constructeur et ton destructeur.
Chris
docCarcass wrote:
class Titi
{
protected :
int truc_;
public:
Titi():truc_(0){};
virtual ~Titi(){};
};
En plus des réponses qui ont déjà été données, attention à ne pas terminer
les déclarations de tes fonctions membre par ";" comme c'est le cas
ci-dessus dans ton constructeur et ton destructeur.
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
En plus des réponses qui ont déjà été données, attention à ne pas terminer les déclarations de tes fonctions membre par ";" comme c'est le cas ci-dessus dans ton constructeur et ton destructeur.
Chris
Jean-Marc Bourguet
"Vincent Lascaux" writes:
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
Pour quelle raison ? Est ce du à l'utilisation de template ?
Un nom nom indépendant des paramètres templates (truc_ en est un) est cherché dans le contexte de définition du template. Ce qui permet aux compilateurs (j'ai vérifié avec gcc 3.4.2 et como) de donner un message d'erreur avec simplement:
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
sans qu'il y ait une instanciation quelque part.
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
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
"Vincent Lascaux" <nospam@nospam.org> writes:
class Titi
{
protected :
int truc_;
public:
Titi():truc_(0){};
virtual ~Titi(){};
};
template<class T>
class Toto : public T
{
public:
void methode(void)
{
truc_++;
}
};
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
Pour quelle raison ? Est ce du à l'utilisation de template ?
Un nom nom indépendant des paramètres templates (truc_ en
est un) est cherché dans le contexte de définition du
template. Ce qui permet aux compilateurs (j'ai vérifié avec
gcc 3.4.2 et como) de donner un message d'erreur avec
simplement:
template<class T>
class Toto : public T
{
public:
void methode(void)
{
truc_++;
}
};
sans qu'il y ait une instanciation quelque part.
Donc, pour que la recherche ait lieu aussi dans le contexte
d'instanciation, il faut rendre le nom dépendant. Pour
quelque chose qui devrait être un membre, le plus simple est
l'utilisation the this->.
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
class Titi { protected : int truc_; public: Titi():truc_(0){}; virtual ~Titi(){}; };
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
g++ 3.4.2 a raison. Il faut utiliser
this->truc_++;
Pour quelle raison ? Est ce du à l'utilisation de template ?
Un nom nom indépendant des paramètres templates (truc_ en est un) est cherché dans le contexte de définition du template. Ce qui permet aux compilateurs (j'ai vérifié avec gcc 3.4.2 et como) de donner un message d'erreur avec simplement:
template<class T> class Toto : public T { public: void methode(void) { truc_++; } };
sans qu'il y ait une instanciation quelque part.
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
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
drkm
Jean-Marc Bourguet writes:
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
--drkm
Jean-Marc Bourguet <jm@bourguet.org> writes:
Donc, pour que la recherche ait lieu aussi dans le contexte
d'instanciation, il faut rendre le nom dépendant. Pour
quelque chose qui devrait être un membre, le plus simple est
l'utilisation the this->.
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
--drkm
Jean-Marc Bourguet
drkm writes:
Jean-Marc Bourguet writes:
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça peut poser problème pour des membres virtuels.
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
drkm <usenet.fclcxx@fgeorges.org> writes:
Jean-Marc Bourguet <jm@bourguet.org> writes:
Donc, pour que la recherche ait lieu aussi dans le contexte
d'instanciation, il faut rendre le nom dépendant. Pour
quelque chose qui devrait être un membre, le plus simple est
l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça
peut poser problème pour des membres virtuels.
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
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça peut poser problème pour des membres virtuels.
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 Lephay
Jean-Marc Bourguet wrote:
drkm writes:
Jean-Marc Bourguet writes:
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça peut poser problème pour des membres virtuels.
Je crois que drkm parlait d'un autre exemple de problème, pas d'un autre exemple de solution ;)
Chris
Jean-Marc Bourguet wrote:
drkm <usenet.fclcxx@fgeorges.org> writes:
Jean-Marc Bourguet <jm@bourguet.org> writes:
Donc, pour que la recherche ait lieu aussi dans le contexte
d'instanciation, il faut rendre le nom dépendant. Pour
quelque chose qui devrait être un membre, le plus simple est
l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça
peut poser problème pour des membres virtuels.
Je crois que drkm parlait d'un autre exemple de problème, pas d'un autre
exemple de solution ;)
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça peut poser problème pour des membres virtuels.
Je crois que drkm parlait d'un autre exemple de problème, pas d'un autre exemple de solution ;)
|> En plus des réponses qui ont déjà été données, attention à ne pas |> terminer les déclarations de tes fonctions membre par ";" comme |> c'est le cas ci-dessus dans ton constructeur et ton destructeur.
Pourquoi ? C'est permis, même si ce n'est pas nécessaire.
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> En plus des réponses qui ont déjà été données, attention à ne pas
|> terminer les déclarations de tes fonctions membre par ";" comme
|> c'est le cas ci-dessus dans ton constructeur et ton destructeur.
Pourquoi ? C'est permis, même si ce n'est pas nécessaire.
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> En plus des réponses qui ont déjà été données, attention à ne pas |> terminer les déclarations de tes fonctions membre par ";" comme |> c'est le cas ci-dessus dans ton constructeur et ton destructeur.
Pourquoi ? C'est permis, même si ce n'est pas nécessaire.
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
drkm
"Christophe Lephay" writes:
Jean-Marc Bourguet wrote:
drkm writes:
Jean-Marc Bourguet writes:
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça peut poser problème pour des membres virtuels.
Je crois que drkm parlait d'un autre exemple de problème, pas d'un autre exemple de solution ;)
Tout juste. Plus précisément, lorsque l'on veut rendre dépendant autre chose qu'un membre.
Donc, pour que la recherche ait lieu aussi dans le contexte
d'instanciation, il faut rendre le nom dépendant. Pour
quelque chose qui devrait être un membre, le plus simple est
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça
peut poser problème pour des membres virtuels.
Je crois que drkm parlait d'un autre exemple de problème, pas d'un autre
exemple de solution ;)
Tout juste. Plus précisément, lorsque l'on veut rendre dépendant
autre chose qu'un membre.
Donc, pour que la recherche ait lieu aussi dans le contexte d'instanciation, il faut rendre le nom dépendant. Pour quelque chose qui devrait être un membre, le plus simple est ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
l'utilisation the this->.
Aurais-tu un exemple dans un autre cas ?
La qualification par la classe de base (T::truc_), mais ça peut poser problème pour des membres virtuels.
Je crois que drkm parlait d'un autre exemple de problème, pas d'un autre exemple de solution ;)
Tout juste. Plus précisément, lorsque l'on veut rendre dépendant autre chose qu'un membre.