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
Anthony Fleury
Drakkhen wrote:
Bonjour,
Bonjour,
J'ai besoin de nommer une fonction de classe : sqrt et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser l'opérateur de résolution de portée ::.
#include <math.h>
class foo { public: double sqrt(double) { ::sqrt(2.0); } };
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
De plus, les en-têtes de la librairie standard utilisent maintenant (pour les compilateurs qui respectent cette partie de la norme) l'espace de nom `std' pour leurs inclusions. Donc la fonction sqrt, sauf using definition, se retrouverai accessible par std::sqrt(2.0).
Anthony -- "You could be my unintended, choice to live my life extended You should be the one I'll always love, I'll be there as soon as I can But I'm busy mending broken pieces of the life I had before" (C) Muse - Unintended
Drakkhen wrote:
Bonjour,
Bonjour,
J'ai besoin de nommer une fonction de classe : sqrt
et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser
l'opérateur de résolution de portée ::.
#include <math.h>
class foo {
public:
double sqrt(double) { ::sqrt(2.0); }
};
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la
fonction sqrt de foo ne s'appelera pas récursivement.
De plus, les en-têtes de la librairie standard utilisent maintenant (pour
les compilateurs qui respectent cette partie de la norme) l'espace de nom
`std' pour leurs inclusions. Donc la fonction sqrt, sauf using definition,
se retrouverai accessible par std::sqrt(2.0).
Anthony
--
"You could be my unintended, choice to live my life extended
You should be the one I'll always love, I'll be there as soon as I can
But I'm busy mending broken pieces of the life I had before"
(C) Muse - Unintended
J'ai besoin de nommer une fonction de classe : sqrt et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser l'opérateur de résolution de portée ::.
#include <math.h>
class foo { public: double sqrt(double) { ::sqrt(2.0); } };
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
De plus, les en-têtes de la librairie standard utilisent maintenant (pour les compilateurs qui respectent cette partie de la norme) l'espace de nom `std' pour leurs inclusions. Donc la fonction sqrt, sauf using definition, se retrouverai accessible par std::sqrt(2.0).
Anthony -- "You could be my unintended, choice to live my life extended You should be the one I'll always love, I'll be there as soon as I can But I'm busy mending broken pieces of the life I had before" (C) Muse - Unintended
Jean-Noël Mégoz
"Anthony Fleury" a écrit dans le message de news:40ac7a1f$0$7707$
Drakkhen wrote:
Bonjour,
Bonjour,
J'ai besoin de nommer une fonction de classe : sqrt et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser l'opérateur de résolution de portée ::.
#include <math.h>
class foo { public: double sqrt(double) { ::sqrt(2.0); } };
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
J'ai du mal à saisir le caractère indispensable de nommer une fonction "sqrt" ! ;)) Ceci dit, la réponse d'Anthony est instructive. Merci ! J.No.
"Anthony Fleury" <fleury_anthony@_hotmail_.com> a écrit dans le message de
news:40ac7a1f$0$7707$636a15ce@news.free.fr...
Drakkhen wrote:
Bonjour,
Bonjour,
J'ai besoin de nommer une fonction de classe : sqrt
et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser
l'opérateur de résolution de portée ::.
#include <math.h>
class foo {
public:
double sqrt(double) { ::sqrt(2.0); }
};
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la
fonction sqrt de foo ne s'appelera pas récursivement.
J'ai du mal à saisir le caractère indispensable de nommer une fonction
"sqrt" ! ;))
Ceci dit, la réponse d'Anthony est instructive. Merci !
J.No.
|> l'operateur :: ira chercher sqrt() dans l'espace de nom global et |> ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
Attention cependant. La norme l'interdit, mais c'est assez fréquent que les en-têtes C contient des macros à la place des fonctions. Disons quelque chose du genre :
extern double sqrt( double ) ; #define sqrt( d ) __builtin_sqrt( d )
J'ai déjà eu ce problème dans la passée (pas très distante, d'ailleurs).
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Anthony Fleury <fleury_anthony@_hotmail_.com> writes:
|> Drakkhen wrote:
|> > J'ai besoin de nommer une fonction de classe : sqrt et j'ai besoin
|> > d'utiliser la fonction sqrt de math.h dedans.
|> > Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
|> Présenté ainsi il n'y a aucun conflit de nom. Il suffit
|> d'utiliser l'opérateur de résolution de portée ::.
|> l'operateur :: ira chercher sqrt() dans l'espace de nom global et
|> ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
Attention cependant. La norme l'interdit, mais c'est assez fréquent
que les en-têtes C contient des macros à la place des fonctions.
Disons quelque chose du genre :
extern double sqrt( double ) ;
#define sqrt( d ) __builtin_sqrt( d )
J'ai déjà eu ce problème dans la passée (pas très distante,
d'ailleurs).
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> l'operateur :: ira chercher sqrt() dans l'espace de nom global et |> ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
Attention cependant. La norme l'interdit, mais c'est assez fréquent que les en-têtes C contient des macros à la place des fonctions. Disons quelque chose du genre :
extern double sqrt( double ) ; #define sqrt( d ) __builtin_sqrt( d )
J'ai déjà eu ce problème dans la passée (pas très distante, d'ailleurs).
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34