Salut à tous !!!
bon, ma question paraitra certainement niaise pour la plupart d'entre vous,
j'espère cependant que quelqu'un aura la gentillesse de me répondre...
voila mon problème :
en fait, je crée une fonction, jusque là pas de problème...
seulement, cette fonction doit me retourne deux résultats différents, que je
voudrais ensuite utiliser dans le programme principal.....
mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me
demande si il est possible qu'une fonction retourne plus d'une variable....
et si oui, est ce qu'il y a une syntaxe spéciale ???
j'espère avoir été clair, mais j'en suis pas très sur... si vous avez besoin
de plus de précisions, dites le moi !!! :o)
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
Vincent Richard
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je voudrais ensuite utiliser dans le programme principal..... mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me demande si il est possible qu'une fonction retourne plus d'une variable.... et si oui, est ce qu'il y a une syntaxe spéciale ???
Une fonction ne peut pas retourner plusieurs valeurs (enfin, pas directement). Il existe plusieurs solutions pour contourner le "problème".
La première consiste à passer des paramètres par référence plutôt que par valeur. Par exemple :
void fonction(int& x, int& y) { x = 123; y = 456; }
int a, b; fonction(a, b); // ici, a vaut 123 et b vaut 456
Une autre solution : créer un objet pour regrouper les 2 valeurs.
struct RetourFonction { int x; int y; };
RetourFonction fonction() { RetourFonction ret;
ret.x = 123; ret.y = 456;
return ret; }
RetourFonction s = fonction(); // s.x vaut 123 et s.y vaut 456
Vincent
-- SL> Au fait elle est mieux ma signature maintenant ? Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon. -+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
voila mon problème :
en fait, je crée une fonction, jusque là pas de problème...
seulement, cette fonction doit me retourne deux résultats différents, que
je voudrais ensuite utiliser dans le programme principal.....
mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me
demande si il est possible qu'une fonction retourne plus d'une
variable.... et si oui, est ce qu'il y a une syntaxe spéciale ???
Une fonction ne peut pas retourner plusieurs valeurs (enfin, pas
directement). Il existe plusieurs solutions pour contourner le "problème".
La première consiste à passer des paramètres par référence plutôt que par
valeur. Par exemple :
void fonction(int& x, int& y)
{
x = 123;
y = 456;
}
int a, b;
fonction(a, b);
// ici, a vaut 123 et b vaut 456
Une autre solution : créer un objet pour regrouper les 2 valeurs.
struct RetourFonction
{
int x;
int y;
};
RetourFonction fonction()
{
RetourFonction ret;
ret.x = 123;
ret.y = 456;
return ret;
}
RetourFonction s = fonction();
// s.x vaut 123 et s.y vaut 456
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je voudrais ensuite utiliser dans le programme principal..... mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me demande si il est possible qu'une fonction retourne plus d'une variable.... et si oui, est ce qu'il y a une syntaxe spéciale ???
Une fonction ne peut pas retourner plusieurs valeurs (enfin, pas directement). Il existe plusieurs solutions pour contourner le "problème".
La première consiste à passer des paramètres par référence plutôt que par valeur. Par exemple :
void fonction(int& x, int& y) { x = 123; y = 456; }
int a, b; fonction(a, b); // ici, a vaut 123 et b vaut 456
Une autre solution : créer un objet pour regrouper les 2 valeurs.
struct RetourFonction { int x; int y; };
RetourFonction fonction() { RetourFonction ret;
ret.x = 123; ret.y = 456;
return ret; }
RetourFonction s = fonction(); // s.x vaut 123 et s.y vaut 456
Vincent
-- SL> Au fait elle est mieux ma signature maintenant ? Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon. -+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
PierreAd
Merci beaucoup d'avoir répondu aussi vite !!!! pour la deuxieme méthode, j'en suis pas encore là, je l'ai dit, je suis un ptit nouveau dans le monde du C++..... mais je suis moins nul qu'avant c'est déjà ça ;o)
PierreAd
le 27 Sep 2003 18:34:58,
Une fonction ne peut pas retourner plusieurs valeurs (enfin, pas directement). Il existe plusieurs solutions pour contourner le "problème".
La première consiste à passer des paramètres par référence plutôt que par valeur. Par exemple :
void fonction(int& x, int& y) { x = 123; y = 456; }
int a, b; fonction(a, b); // ici, a vaut 123 et b vaut 456
Une autre solution : créer un objet pour regrouper les 2 valeurs.
struct RetourFonction { int x; int y; };
RetourFonction fonction() { RetourFonction ret;
ret.x = 123; ret.y = 456;
return ret; }
RetourFonction s = fonction(); // s.x vaut 123 et s.y vaut 456
Vincent
Merci beaucoup d'avoir répondu aussi vite !!!! pour la deuxieme méthode,
j'en suis pas encore là, je l'ai dit, je suis un ptit nouveau dans le monde
du C++..... mais je suis moins nul qu'avant c'est déjà ça ;o)
PierreAd
le 27 Sep 2003 18:34:58,
Une fonction ne peut pas retourner plusieurs valeurs (enfin, pas
directement). Il existe plusieurs solutions pour contourner le "problème".
La première consiste à passer des paramètres par référence plutôt que par
valeur. Par exemple :
void fonction(int& x, int& y)
{
x = 123;
y = 456;
}
int a, b;
fonction(a, b);
// ici, a vaut 123 et b vaut 456
Une autre solution : créer un objet pour regrouper les 2 valeurs.
struct RetourFonction
{
int x;
int y;
};
RetourFonction fonction()
{
RetourFonction ret;
ret.x = 123;
ret.y = 456;
return ret;
}
RetourFonction s = fonction();
// s.x vaut 123 et s.y vaut 456
Merci beaucoup d'avoir répondu aussi vite !!!! pour la deuxieme méthode, j'en suis pas encore là, je l'ai dit, je suis un ptit nouveau dans le monde du C++..... mais je suis moins nul qu'avant c'est déjà ça ;o)
PierreAd
le 27 Sep 2003 18:34:58,
Une fonction ne peut pas retourner plusieurs valeurs (enfin, pas directement). Il existe plusieurs solutions pour contourner le "problème".
La première consiste à passer des paramètres par référence plutôt que par valeur. Par exemple :
void fonction(int& x, int& y) { x = 123; y = 456; }
int a, b; fonction(a, b); // ici, a vaut 123 et b vaut 456
Une autre solution : créer un objet pour regrouper les 2 valeurs.
struct RetourFonction { int x; int y; };
RetourFonction fonction() { RetourFonction ret;
ret.x = 123; ret.y = 456;
return ret; }
RetourFonction s = fonction(); // s.x vaut 123 et s.y vaut 456
Vincent
Christophe Lephay
"PierreAd" a écrit dans le message de news:3f75ba95$0$27025$
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je
voudrais ensuite utiliser dans le programme principal..... mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me demande si il est possible qu'une fonction retourne plus d'une variable....
et si oui, est ce qu'il y a une syntaxe spéciale ???
si tu dois retourner deux int :
std::pair< int, int > fonction() { int x, y; ... return std::pair< int, int > (x, y ); //(*) }
(*)ou alors, plus simple :
return std::make_pair( x, y );
Tu utilises ensuite comme suit :
std::pair< int, int> truc = fonction();
int x, y; x = truc.first; y = truc.second;
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux faire un typedef...
Chris
"PierreAd" <pierread@free.fr> a écrit dans le message de
news:3f75ba95$0$27025$626a54ce@news.free.fr...
voila mon problème :
en fait, je crée une fonction, jusque là pas de problème...
seulement, cette fonction doit me retourne deux résultats différents, que
je
voudrais ensuite utiliser dans le programme principal.....
mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me
demande si il est possible qu'une fonction retourne plus d'une
variable....
et si oui, est ce qu'il y a une syntaxe spéciale ???
si tu dois retourner deux int :
std::pair< int, int > fonction()
{
int x, y;
...
return std::pair< int, int > (x, y ); //(*)
}
(*)ou alors, plus simple :
return std::make_pair( x, y );
Tu utilises ensuite comme suit :
std::pair< int, int> truc = fonction();
int x, y;
x = truc.first;
y = truc.second;
std::pair et std::make_pair font partie de la bibliothèque standard. Si
c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux
faire un typedef...
"PierreAd" a écrit dans le message de news:3f75ba95$0$27025$
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je
voudrais ensuite utiliser dans le programme principal..... mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me demande si il est possible qu'une fonction retourne plus d'une variable....
et si oui, est ce qu'il y a une syntaxe spéciale ???
si tu dois retourner deux int :
std::pair< int, int > fonction() { int x, y; ... return std::pair< int, int > (x, y ); //(*) }
(*)ou alors, plus simple :
return std::make_pair( x, y );
Tu utilises ensuite comme suit :
std::pair< int, int> truc = fonction();
int x, y; x = truc.first; y = truc.second;
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux faire un typedef...
Chris
Jonathan Mcdougall
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je
Une fonction qui retourne deux valeurs différentes fait probablement deux choses différentes. Sépare-la en deux.
Sinon, utilise les solutions déjà proposées.
Jonathan
voila mon problème :
en fait, je crée une fonction, jusque là pas de problème...
seulement, cette fonction doit me retourne deux résultats différents, que
je
Une fonction qui retourne deux valeurs différentes fait probablement deux
choses différentes. Sépare-la en deux.
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je
Une fonction qui retourne deux valeurs différentes fait probablement deux choses différentes. Sépare-la en deux.
Sinon, utilise les solutions déjà proposées.
Jonathan
hackervalley
PierreAd wrote:
Salut à tous !!! bon, ma question paraitra certainement niaise pour la plupart d'entre vous, j'espère cependant que quelqu'un aura la gentillesse de me répondre...
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je voudrais ensuite utiliser dans le programme principal..... mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me demande si il est possible qu'une fonction retourne plus d'une variable.... et si oui, est ce qu'il y a une syntaxe spéciale ???
j'espère avoir été clair, mais j'en suis pas très sur... si vous avez besoin de plus de précisions, dites le moi !!! :o)
Ciao !!!
PierreAd
--
http://www.geocities.com/c_moi_pierread/
A tout hasard, je te propose de voir aussi les pointeurs de fonctions. http://www.function-pointer.org/
Cela ne répond pas précisément à ta question, mais donne une autre piste pour traiter ton problème.
Bonne chance .
hackervalley /* http://hackervalley.free.fr */
PierreAd wrote:
Salut à tous !!!
bon, ma question paraitra certainement niaise pour la plupart d'entre vous,
j'espère cependant que quelqu'un aura la gentillesse de me répondre...
voila mon problème :
en fait, je crée une fonction, jusque là pas de problème...
seulement, cette fonction doit me retourne deux résultats différents, que je
voudrais ensuite utiliser dans le programme principal.....
mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me
demande si il est possible qu'une fonction retourne plus d'une variable....
et si oui, est ce qu'il y a une syntaxe spéciale ???
j'espère avoir été clair, mais j'en suis pas très sur... si vous avez besoin
de plus de précisions, dites le moi !!! :o)
Ciao !!!
PierreAd
--
http://www.geocities.com/c_moi_pierread/
A tout hasard, je te propose de voir aussi les pointeurs de fonctions.
http://www.function-pointer.org/
Cela ne répond pas précisément à ta question, mais donne une autre piste
pour traiter ton problème.
Salut à tous !!! bon, ma question paraitra certainement niaise pour la plupart d'entre vous, j'espère cependant que quelqu'un aura la gentillesse de me répondre...
voila mon problème : en fait, je crée une fonction, jusque là pas de problème... seulement, cette fonction doit me retourne deux résultats différents, que je voudrais ensuite utiliser dans le programme principal..... mais voila, je ne sais pas comment faire, en fait, c'est pour ça que je me demande si il est possible qu'une fonction retourne plus d'une variable.... et si oui, est ce qu'il y a une syntaxe spéciale ???
j'espère avoir été clair, mais j'en suis pas très sur... si vous avez besoin de plus de précisions, dites le moi !!! :o)
Ciao !!!
PierreAd
--
http://www.geocities.com/c_moi_pierread/
A tout hasard, je te propose de voir aussi les pointeurs de fonctions. http://www.function-pointer.org/
Cela ne répond pas précisément à ta question, mais donne une autre piste pour traiter ton problème.
Bonne chance .
hackervalley /* http://hackervalley.free.fr */
Matt...
si tu dois retourner deux int :
std::pair< int, int > fonction() { int x, y; ... return std::pair< int, int > (x, y ); //(*) }
(*)ou alors, plus simple :
return std::make_pair( x, y );
Tu utilises ensuite comme suit :
std::pair< int, int> truc = fonction();
int x, y; x = truc.first; y = truc.second;
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux
faire un typedef...
Chris
Bonsoir,
t'as pas plus compliqué ???
Matt...
si tu dois retourner deux int :
std::pair< int, int > fonction()
{
int x, y;
...
return std::pair< int, int > (x, y ); //(*)
}
(*)ou alors, plus simple :
return std::make_pair( x, y );
Tu utilises ensuite comme suit :
std::pair< int, int> truc = fonction();
int x, y;
x = truc.first;
y = truc.second;
std::pair et std::make_pair font partie de la bibliothèque standard. Si
c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu
peux
std::pair< int, int > fonction() { int x, y; ... return std::pair< int, int > (x, y ); //(*) }
(*)ou alors, plus simple :
return std::make_pair( x, y );
Tu utilises ensuite comme suit :
std::pair< int, int> truc = fonction();
int x, y; x = truc.first; y = truc.second;
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux
faire un typedef...
Chris
Bonsoir,
t'as pas plus compliqué ???
Matt...
Michaël Monerau
Matt... wrote:
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux faire un typedef...
Chris
t'as pas plus compliqué ???
Si, ne sous-estime pas le C++. On peut faire beaucoup plus compliqué que ça !!
;-)
Nan, mais en vérité, ce n'est pas bien compliqué, il faut juste connaître std::pair. -- <=- Michaël "Cortex" Monerau -=>
Matt... wrote:
std::pair et std::make_pair font partie de la bibliothèque standard.
Si c'est un peu long de se taper à chaque fois les std::pair<int,
int>, tu peux faire un typedef...
Chris
t'as pas plus compliqué ???
Si, ne sous-estime pas le C++. On peut faire beaucoup plus compliqué que ça
!!
;-)
Nan, mais en vérité, ce n'est pas bien compliqué, il faut juste connaître
std::pair.
--
<=- Michaël "Cortex" Monerau -=>
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux faire un typedef...
Chris
t'as pas plus compliqué ???
Si, ne sous-estime pas le C++. On peut faire beaucoup plus compliqué que ça !!
;-)
Nan, mais en vérité, ce n'est pas bien compliqué, il faut juste connaître std::pair. -- <=- Michaël "Cortex" Monerau -=>
Christophe Lephay
"Matt..." a écrit dans le message de news:3f771af4$0$20617$
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux
faire un typedef... t'as pas plus compliqué ???
S'il s'agit de retourner deux valeurs, il n'y a surtout pas de moyen de faire plus simple. Dans tous les cas, tu es obligé de passer par une classe ou structure pour renvoyer deux valeurs. Si tu connais std::pair (ce qui est tout de même fortement conseillé), c'est plus lisible que de créer spécialement une classe pour celà. C'est d'ailleurs la méthode utilisée par la SL quand elle en a besoin.
Quand à l'alternative qui consiste à passer les paramètres via des reférences pour pouvoir les modifier, je la trouve à la fois moins lisible et moins robuste : moins lisible car ce n'est pas évident en lisant un appel de fonction de savoir quels sont les paramètres qui seront modifiés, ce qui peut induire des effets de bords imprévus (àa c'est pour la partie robustesse).
Maintenant, vu que le besoin de retourner deux valeurs devrait être peu fréquent, la relative complexité est plus que gérable...
Chris
"Matt..." <nospam@free.fr> a écrit dans le message de
news:3f771af4$0$20617$626a54ce@news.free.fr...
std::pair et std::make_pair font partie de la bibliothèque standard. Si
c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu
peux
faire un typedef...
t'as pas plus compliqué ???
S'il s'agit de retourner deux valeurs, il n'y a surtout pas de moyen de
faire plus simple. Dans tous les cas, tu es obligé de passer par une classe
ou structure pour renvoyer deux valeurs. Si tu connais std::pair (ce qui est
tout de même fortement conseillé), c'est plus lisible que de créer
spécialement une classe pour celà. C'est d'ailleurs la méthode utilisée par
la SL quand elle en a besoin.
Quand à l'alternative qui consiste à passer les paramètres via des
reférences pour pouvoir les modifier, je la trouve à la fois moins lisible
et moins robuste : moins lisible car ce n'est pas évident en lisant un appel
de fonction de savoir quels sont les paramètres qui seront modifiés, ce qui
peut induire des effets de bords imprévus (àa c'est pour la partie
robustesse).
Maintenant, vu que le besoin de retourner deux valeurs devrait être peu
fréquent, la relative complexité est plus que gérable...
"Matt..." a écrit dans le message de news:3f771af4$0$20617$
std::pair et std::make_pair font partie de la bibliothèque standard. Si c'est un peu long de se taper à chaque fois les std::pair<int, int>, tu peux
faire un typedef... t'as pas plus compliqué ???
S'il s'agit de retourner deux valeurs, il n'y a surtout pas de moyen de faire plus simple. Dans tous les cas, tu es obligé de passer par une classe ou structure pour renvoyer deux valeurs. Si tu connais std::pair (ce qui est tout de même fortement conseillé), c'est plus lisible que de créer spécialement une classe pour celà. C'est d'ailleurs la méthode utilisée par la SL quand elle en a besoin.
Quand à l'alternative qui consiste à passer les paramètres via des reférences pour pouvoir les modifier, je la trouve à la fois moins lisible et moins robuste : moins lisible car ce n'est pas évident en lisant un appel de fonction de savoir quels sont les paramètres qui seront modifiés, ce qui peut induire des effets de bords imprévus (àa c'est pour la partie robustesse).
Maintenant, vu que le besoin de retourner deux valeurs devrait être peu fréquent, la relative complexité est plus que gérable...