On Thu, 19 Jan 2006 21:29:12 +0100, (Bruno Causse):
Subject: itoa
par quoi remplacer cette fonction
Section 27.1 de la FAQ. http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/
there are no arguments to 'itoa' that depend on a template parameter, so a declaration of 'itoa' must be available
Le compilateur a rencontré l'appel à une fonction "itoa" qui n'existe pas. Typiquement, tu as oublié un #include quelque part.
Mais j'admets que le message d'erreur n'est pas très explicite.
Jean-Marc Bourguet
(Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable (Dos), vous devez avoir une routine?
stringstream
de plus cette fonction est dans une methode template et je ne comprend pas le warning :-(
warning: there are no arguments to 'itoa' that depend on a template parameter, so a declaration of 'itoa' must be available
Comme il n'y a aucun argument de itoa qui dépend d'un paramètre template, une déclaration de itoa doit être disponible. Seuls les noms qui dépendent d'un paramètre template sont cherchés dans le contexte d'instantiation, les autres ne sont cherchés que dans le contexte de définition du template. C'était aussi la source de ton autre problème: TMsgJoin ne dépendait pas d'un paramètre template dont il fallait une définition disponible; comme la définition en fait dépendait d'un paramètre template, j'ai rendu ce fait explicite.
Je crains être confu. Reprenons à partir du début.
Dans un template quand on trouve un nom, il faut chercher une définition (si elle ne se trouve pas dans le template bien sûr). On peut les chercher à deux endroits: soit dans le contexte de la définition du template, soit dans le contexte de l'instantiation du template.
Certains noms sont indépendants des paramètres templates, c'est à dire que rien dans leur utilisation dépend des paramètres templates. C'était le cas de TMsgJoin, c'est aussi le cas d'un appel: f(e1, e2); si e1 et e2 n'ont pas des types qui dépendent d'un paramètre template. Ces noms sont cherchés uniquement dans le contexte de la définition du template.
D'autres noms sont dépendants d'un ou plusieurs paramètres templates. Par exemple si un des arguments d'une fonction a pour type un paramètre template. Ces noms sont cherchés aussi dans le contexte d'instantiation.
Quelque chose de particulier: si une classe template dérive d'un paramètre template, les noms non qualifiés ne seront pas cherchés dans cette classe de base (c'est pourquoi TMsgJoin n'était pas trouvé). Il faut alors rendre ces noms dépendants. Pour les membres non types, c'est facile on utilise this->.
La règle de ne pas recherché les noms indépendants hors du contexte de définition a été implémentées par gcc qu'à partir de 3.4 me semble-t'il.
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
pasde.hcyrano.spam@free.fr (Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable
(Dos), vous devez avoir une routine?
stringstream
de plus cette fonction est dans une methode template et je ne comprend
pas le warning :-(
warning: there are no arguments to 'itoa' that depend on a template
parameter, so a declaration of 'itoa' must be available
Comme il n'y a aucun argument de itoa qui dépend d'un
paramètre template, une déclaration de itoa doit être
disponible. Seuls les noms qui dépendent d'un paramètre
template sont cherchés dans le contexte d'instantiation, les
autres ne sont cherchés que dans le contexte de définition
du template. C'était aussi la source de ton autre problème:
TMsgJoin ne dépendait pas d'un paramètre template dont il
fallait une définition disponible; comme la définition en
fait dépendait d'un paramètre template, j'ai rendu ce fait
explicite.
Je crains être confu. Reprenons à partir du début.
Dans un template quand on trouve un nom, il faut chercher
une définition (si elle ne se trouve pas dans le template
bien sûr). On peut les chercher à deux endroits: soit dans
le contexte de la définition du template, soit dans le
contexte de l'instantiation du template.
Certains noms sont indépendants des paramètres
templates, c'est à dire que rien dans leur utilisation
dépend des paramètres templates. C'était le cas de
TMsgJoin, c'est aussi le cas d'un appel:
f(e1, e2);
si e1 et e2 n'ont pas des types qui dépendent d'un paramètre
template. Ces noms sont cherchés uniquement dans le
contexte de la définition du template.
D'autres noms sont dépendants d'un ou plusieurs paramètres
templates. Par exemple si un des arguments d'une fonction a
pour type un paramètre template. Ces noms sont cherchés
aussi dans le contexte d'instantiation.
Quelque chose de particulier: si une classe template dérive
d'un paramètre template, les noms non qualifiés ne seront
pas cherchés dans cette classe de base (c'est pourquoi
TMsgJoin n'était pas trouvé). Il faut alors rendre ces noms
dépendants. Pour les membres non types, c'est facile on
utilise this->.
La règle de ne pas recherché les noms indépendants hors du
contexte de définition a été implémentées par gcc qu'à
partir de 3.4 me semble-t'il.
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
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable (Dos), vous devez avoir une routine?
stringstream
de plus cette fonction est dans une methode template et je ne comprend pas le warning :-(
warning: there are no arguments to 'itoa' that depend on a template parameter, so a declaration of 'itoa' must be available
Comme il n'y a aucun argument de itoa qui dépend d'un paramètre template, une déclaration de itoa doit être disponible. Seuls les noms qui dépendent d'un paramètre template sont cherchés dans le contexte d'instantiation, les autres ne sont cherchés que dans le contexte de définition du template. C'était aussi la source de ton autre problème: TMsgJoin ne dépendait pas d'un paramètre template dont il fallait une définition disponible; comme la définition en fait dépendait d'un paramètre template, j'ai rendu ce fait explicite.
Je crains être confu. Reprenons à partir du début.
Dans un template quand on trouve un nom, il faut chercher une définition (si elle ne se trouve pas dans le template bien sûr). On peut les chercher à deux endroits: soit dans le contexte de la définition du template, soit dans le contexte de l'instantiation du template.
Certains noms sont indépendants des paramètres templates, c'est à dire que rien dans leur utilisation dépend des paramètres templates. C'était le cas de TMsgJoin, c'est aussi le cas d'un appel: f(e1, e2); si e1 et e2 n'ont pas des types qui dépendent d'un paramètre template. Ces noms sont cherchés uniquement dans le contexte de la définition du template.
D'autres noms sont dépendants d'un ou plusieurs paramètres templates. Par exemple si un des arguments d'une fonction a pour type un paramètre template. Ces noms sont cherchés aussi dans le contexte d'instantiation.
Quelque chose de particulier: si une classe template dérive d'un paramètre template, les noms non qualifiés ne seront pas cherchés dans cette classe de base (c'est pourquoi TMsgJoin n'était pas trouvé). Il faut alors rendre ces noms dépendants. Pour les membres non types, c'est facile on utilise this->.
La règle de ne pas recherché les noms indépendants hors du contexte de définition a été implémentées par gcc qu'à partir de 3.4 me semble-t'il.
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
Gabriel Dos Reis
Fabien LE LEZ writes:
| On Thu, 19 Jan 2006 21:29:12 +0100, (Bruno | Causse): | | >Subject: itoa | | >par quoi remplacer cette fonction | | Section 27.1 de la FAQ. | http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/ | | >there are no arguments to 'itoa' that depend on a template | >parameter, so a declaration of 'itoa' must be available | | Le compilateur a rencontré l'appel à une fonction "itoa" qui n'existe | pas. Typiquement, tu as oublié un #include quelque part. | | Mais j'admets que le message d'erreur n'est pas très explicite.
Indeed. Le message d'erreur a été ajouté dans la transition à 3.4.x où la recherche de nom en deux phases a été pour la première fois implémentée dans GCC. Le compilateur essaie de dire qu'il n'y a pas de déclaration de itoa -- durant la première phase de recherche de nom -- et donc qu'il ne peut pas le prendre comme un nom dépendant (qu'il chercherait dans la seconde phase.) En conséquence, il demande une déclaration de "itoa".
-- Gaby
Fabien LE LEZ <gramster@gramster.com> writes:
| On Thu, 19 Jan 2006 21:29:12 +0100, pasde.hcyrano.spam@free.fr (Bruno
| Causse):
|
| >Subject: itoa
|
| >par quoi remplacer cette fonction
|
| Section 27.1 de la FAQ.
| http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/
|
| >there are no arguments to 'itoa' that depend on a template
| >parameter, so a declaration of 'itoa' must be available
|
| Le compilateur a rencontré l'appel à une fonction "itoa" qui n'existe
| pas. Typiquement, tu as oublié un #include quelque part.
|
| Mais j'admets que le message d'erreur n'est pas très explicite.
Indeed.
Le message d'erreur a été ajouté dans la transition à 3.4.x où la
recherche de nom en deux phases a été pour la première fois
implémentée dans GCC. Le compilateur essaie de dire qu'il n'y a pas de
déclaration de itoa -- durant la première phase de recherche de nom --
et donc qu'il ne peut pas le prendre comme un nom dépendant (qu'il
chercherait dans la seconde phase.) En conséquence, il demande une
déclaration de "itoa".
| On Thu, 19 Jan 2006 21:29:12 +0100, (Bruno | Causse): | | >Subject: itoa | | >par quoi remplacer cette fonction | | Section 27.1 de la FAQ. | http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/ | | >there are no arguments to 'itoa' that depend on a template | >parameter, so a declaration of 'itoa' must be available | | Le compilateur a rencontré l'appel à une fonction "itoa" qui n'existe | pas. Typiquement, tu as oublié un #include quelque part. | | Mais j'admets que le message d'erreur n'est pas très explicite.
Indeed. Le message d'erreur a été ajouté dans la transition à 3.4.x où la recherche de nom en deux phases a été pour la première fois implémentée dans GCC. Le compilateur essaie de dire qu'il n'y a pas de déclaration de itoa -- durant la première phase de recherche de nom -- et donc qu'il ne peut pas le prendre comme un nom dépendant (qu'il chercherait dans la seconde phase.) En conséquence, il demande une déclaration de "itoa".
-- Gaby
Marc Duflot
Jean-Marc Bourguet wrote:
(Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable (Dos), vous devez avoir une routine?
stringstream
Voir aussi lexical_cast de boost.
Jean-Marc Bourguet wrote:
pasde.hcyrano.spam@free.fr (Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable
(Dos), vous devez avoir une routine?
| Jean-Marc Bourguet wrote: | > (Bruno Causse) writes: | > | > | >>bonsoir, | >> | >>par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable | >>(Dos), vous devez avoir une routine? | > | > | > stringstream | | Voir aussi lexical_cast de boost.
quit fait penser qu'on fait un cast...
-- gaby
Bruno CAUSSE
dans l'article , Jean-Marc Bourguet à a écrit le 19/01/06 21:47 :
(Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable (Dos), vous devez avoir une routine?
stringstream
de plus cette fonction est dans une methode template et je ne comprend pas le warning :-(
warning: there are no arguments to 'itoa' that depend on a template parameter, so a declaration of 'itoa' must be available
Comme il n'y a aucun argument de itoa qui dépend d'un paramètre template, une déclaration de itoa doit être disponible. Seuls les noms qui dépendent d'un paramètre template sont cherchés dans le contexte d'instantiation, les autres ne sont cherchés que dans le contexte de définition du template. C'était aussi la source de ton autre problème: TMsgJoin ne dépendait pas d'un paramètre template dont il fallait une définition disponible; comme la définition en fait dépendait d'un paramètre template, j'ai rendu ce fait explicite.
Je crains être confu. Reprenons à partir du début.
Dans un template quand on trouve un nom, il faut chercher une définition (si elle ne se trouve pas dans le template bien sûr). On peut les chercher à deux endroits: soit dans le contexte de la définition du template, soit dans le contexte de l'instantiation du template.
Certains noms sont indépendants des paramètres templates, c'est à dire que rien dans leur utilisation dépend des paramètres templates. C'était le cas de TMsgJoin, c'est aussi le cas d'un appel: f(e1, e2); si e1 et e2 n'ont pas des types qui dépendent d'un paramètre template. Ces noms sont cherchés uniquement dans le contexte de la définition du template.
D'autres noms sont dépendants d'un ou plusieurs paramètres templates. Par exemple si un des arguments d'une fonction a pour type un paramètre template. Ces noms sont cherchés aussi dans le contexte d'instantiation.
Quelque chose de particulier: si une classe template dérive d'un paramètre template, les noms non qualifiés ne seront pas cherchés dans cette classe de base (c'est pourquoi TMsgJoin n'était pas trouvé). Il faut alors rendre ces noms dépendants. Pour les membres non types, c'est facile on utilise this->.
La règle de ne pas recherché les noms indépendants hors du contexte de définition a été implémentées par gcc qu'à partir de 3.4 me semble-t'il.
A+
J'ai encore bcq de mal a suivre (mais je m'accroche), ca compile sans warning (gcc 4.01) :-).
Mercis a tous
dans l'article 87u0c0vtac.fsf@news.bourguet.org, Jean-Marc Bourguet à
jm@bourguet.org a écrit le 19/01/06 21:47 :
pasde.hcyrano.spam@free.fr (Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable
(Dos), vous devez avoir une routine?
stringstream
de plus cette fonction est dans une methode template et je ne comprend
pas le warning :-(
warning: there are no arguments to 'itoa' that depend on a template
parameter, so a declaration of 'itoa' must be available
Comme il n'y a aucun argument de itoa qui dépend d'un
paramètre template, une déclaration de itoa doit être
disponible. Seuls les noms qui dépendent d'un paramètre
template sont cherchés dans le contexte d'instantiation, les
autres ne sont cherchés que dans le contexte de définition
du template. C'était aussi la source de ton autre problème:
TMsgJoin ne dépendait pas d'un paramètre template dont il
fallait une définition disponible; comme la définition en
fait dépendait d'un paramètre template, j'ai rendu ce fait
explicite.
Je crains être confu. Reprenons à partir du début.
Dans un template quand on trouve un nom, il faut chercher
une définition (si elle ne se trouve pas dans le template
bien sûr). On peut les chercher à deux endroits: soit dans
le contexte de la définition du template, soit dans le
contexte de l'instantiation du template.
Certains noms sont indépendants des paramètres
templates, c'est à dire que rien dans leur utilisation
dépend des paramètres templates. C'était le cas de
TMsgJoin, c'est aussi le cas d'un appel:
f(e1, e2);
si e1 et e2 n'ont pas des types qui dépendent d'un paramètre
template. Ces noms sont cherchés uniquement dans le
contexte de la définition du template.
D'autres noms sont dépendants d'un ou plusieurs paramètres
templates. Par exemple si un des arguments d'une fonction a
pour type un paramètre template. Ces noms sont cherchés
aussi dans le contexte d'instantiation.
Quelque chose de particulier: si une classe template dérive
d'un paramètre template, les noms non qualifiés ne seront
pas cherchés dans cette classe de base (c'est pourquoi
TMsgJoin n'était pas trouvé). Il faut alors rendre ces noms
dépendants. Pour les membres non types, c'est facile on
utilise this->.
La règle de ne pas recherché les noms indépendants hors du
contexte de définition a été implémentées par gcc qu'à
partir de 3.4 me semble-t'il.
A+
J'ai encore bcq de mal a suivre (mais je m'accroche), ca compile sans
warning (gcc 4.01) :-).
dans l'article , Jean-Marc Bourguet à a écrit le 19/01/06 21:47 :
(Bruno Causse) writes:
bonsoir,
par quoi remplacer cette fonction, j'ai lu quelle n'etait pas portable (Dos), vous devez avoir une routine?
stringstream
de plus cette fonction est dans une methode template et je ne comprend pas le warning :-(
warning: there are no arguments to 'itoa' that depend on a template parameter, so a declaration of 'itoa' must be available
Comme il n'y a aucun argument de itoa qui dépend d'un paramètre template, une déclaration de itoa doit être disponible. Seuls les noms qui dépendent d'un paramètre template sont cherchés dans le contexte d'instantiation, les autres ne sont cherchés que dans le contexte de définition du template. C'était aussi la source de ton autre problème: TMsgJoin ne dépendait pas d'un paramètre template dont il fallait une définition disponible; comme la définition en fait dépendait d'un paramètre template, j'ai rendu ce fait explicite.
Je crains être confu. Reprenons à partir du début.
Dans un template quand on trouve un nom, il faut chercher une définition (si elle ne se trouve pas dans le template bien sûr). On peut les chercher à deux endroits: soit dans le contexte de la définition du template, soit dans le contexte de l'instantiation du template.
Certains noms sont indépendants des paramètres templates, c'est à dire que rien dans leur utilisation dépend des paramètres templates. C'était le cas de TMsgJoin, c'est aussi le cas d'un appel: f(e1, e2); si e1 et e2 n'ont pas des types qui dépendent d'un paramètre template. Ces noms sont cherchés uniquement dans le contexte de la définition du template.
D'autres noms sont dépendants d'un ou plusieurs paramètres templates. Par exemple si un des arguments d'une fonction a pour type un paramètre template. Ces noms sont cherchés aussi dans le contexte d'instantiation.
Quelque chose de particulier: si une classe template dérive d'un paramètre template, les noms non qualifiés ne seront pas cherchés dans cette classe de base (c'est pourquoi TMsgJoin n'était pas trouvé). Il faut alors rendre ces noms dépendants. Pour les membres non types, c'est facile on utilise this->.
La règle de ne pas recherché les noms indépendants hors du contexte de définition a été implémentées par gcc qu'à partir de 3.4 me semble-t'il.
A+
J'ai encore bcq de mal a suivre (mais je m'accroche), ca compile sans warning (gcc 4.01) :-).
Mercis a tous
Jean-Marc Bourguet
Bruno CAUSSE writes:
J'ai encore bcq de mal a suivre (mais je m'accroche), ca compile sans warning (gcc 4.01) :-).
J'ai pas le sentiment d'avoir ete tres clair :-(
-- 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
Bruno CAUSSE <envoi@lesSpam.fr> writes:
J'ai encore bcq de mal a suivre (mais je m'accroche), ca compile sans
warning (gcc 4.01) :-).
J'ai pas le sentiment d'avoir ete tres clair :-(
--
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 encore bcq de mal a suivre (mais je m'accroche), ca compile sans warning (gcc 4.01) :-).
J'ai pas le sentiment d'avoir ete tres clair :-(
-- 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