[C++] valeur par défaut
Résolu
Bonjour.
Voila mon problème :
je déclare une fonction ainsi :
void f(double&,double&,double);
maintenant, je souhaite avoir des valeur par défaut pour les deux derniers paramètres, je tape donc :
void f(double & a,double& b=1.2,double c=2.3){...}
le compilateur accepte bien le paramètre par défaut pour c, mais pas pour b. Le '&' le gène. Bien entendu, je veu pouvoir conservé le '&' car dans le cas ou il est fourni, b est modifié.
si quelqu'un à une idée pour résoudre ce problème, merci d'avance.
Voila mon problème :
je déclare une fonction ainsi :
void f(double&,double&,double);
maintenant, je souhaite avoir des valeur par défaut pour les deux derniers paramètres, je tape donc :
void f(double & a,double& b=1.2,double c=2.3){...}
le compilateur accepte bien le paramètre par défaut pour c, mais pas pour b. Le '&' le gène. Bien entendu, je veu pouvoir conservé le '&' car dans le cas ou il est fourni, b est modifié.
si quelqu'un à une idée pour résoudre ce problème, merci d'avance.
A voir également:
- [C++] valeur par défaut
- Ouvrir avec par défaut - Guide
- Dns par defaut - Guide
- Google page d'accueil par défaut - Guide
- Windows 11 clic droit afficher plus d'options par défaut - Guide
- Mot de passe par defaut livebox - Guide
12 réponses
Je ne pense pas que tu puisse passer comme cela une valeur par défaut dans ton entete de fonction, si tu veux la récupérer ensuite.
Essai tout simplement un truc du genre :
Essai tout simplement un truc du genre :
void f(double & a,double& b,double c=2.3){ b = 1.2; // --- Default start value }
Voici exatement ce que je tape :
et l'erreur retourné :
void traite (char** a,double& b,double& c,const double &l=1.2,char* u) { ...}
et l'erreur retourné :
traite.h:15: assignement of read-only reference 'l'Mon compilo est gcc sous linux version 3.2.3
Ou alors il faut utiliser des const références :
Bonne chance
void f(const double & x,const double & y=2.3,const double & z=7.6){ ... }
Bonne chance
Merci.
En fait la solution de kij_82 ne conviens pas car à ce moment la on ne peut pas faire :
f(3.25) par exemple, car il manquerai un paramètre.
La solution de mamiemando ne conviens pas non plus, car le compilateur me dit qu'il est impossible d'assigner une valeur à une variable const.(en résumé)
quelque par, je comprend qu'il ne veuille pas m'accepter cette déclaration. Double& passe la référence à b. Si on ne met pas b, il faut alors créer une variable de type double qui prendra la valeur par défaut.
une dernière hypothèse serai d'utiliser les new, mais je suis peux familier avec ça.
un truc dans le genre de :
void f(double& a,double& b=new double(1.2))
En fait la solution de kij_82 ne conviens pas car à ce moment la on ne peut pas faire :
f(3.25) par exemple, car il manquerai un paramètre.
La solution de mamiemando ne conviens pas non plus, car le compilateur me dit qu'il est impossible d'assigner une valeur à une variable const.(en résumé)
quelque par, je comprend qu'il ne veuille pas m'accepter cette déclaration. Double& passe la référence à b. Si on ne met pas b, il faut alors créer une variable de type double qui prendra la valeur par défaut.
une dernière hypothèse serai d'utiliser les new, mais je suis peux familier avec ça.
un truc dans le genre de :
void f(double& a,double& b=new double(1.2))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
La solution de mamiemando ne conviens pas non plus, car le compilateur me dit qu'il est impossible d'assigner une valeur à une variable const.(en résumé)
Chez moi ça compile sans problème
Chez moi ça compile sans problème
Ben oui coco mais tu ne peux mettre des valeurs par défaut que pour les paramètres en fin de prototypes ! Or la ton char * n'a pas de valeur par défaut.
Pour info c'est gcc 4.1.2 que j'utilise, mais je pense que ça n'a rien à voir avec la version de gcc sur ce coup
Bonne chance
(mando@cobo) (~) $ cat plop.cpp #include <iostream> void f(const float & x,const float & y=6.9,const float & z=2.8){ std::cout << x << ' ' << y << ' ' << z << ' ' << std::endl; } int main(){ f(1.2); return 0; } (mando@cobo) (~) $ g++ -W -Wall plop.cpp (mando@cobo) (~) $ ./a.out 1.2 6.9 2.8
Pour info c'est gcc 4.1.2 que j'utilise, mais je pense que ça n'a rien à voir avec la version de gcc sur ce coup
Bonne chance
oups, autant pour moi, j'ai oublié de recopier. En fait c bien :
void traite (char** a,double& b,double& c,const double &l=1.2,char* u=0)
{
...}
Le problème persiste...
void traite (char** a,double& b,double& c,const double &l=1.2,char* u=0)
{
...}
Le problème persiste...
Pour un pointeur nul utilise plutot la constante NULL.
A noter que envoyer NULL sur std::cout bloque l'écriture sur ce flux c'était peut être ton problème. Ca doit se régler avec un std::flush ou truc dans le genre.
Bonne chance
#include <iostream> int f(const double & x,const double & y = 0,const char * z = NULL){ std::cout << x << ' ' << y << ' ' << z << std::endl; std::cout << std::endl; } void traite (char** a,const double & b,const double & c,const double &l=1.2,char* u=NULL){ std::cout << "*a=" << *a << std::endl; std::cout << "b=" << b << std::endl; std::cout << "c=" << c << std::endl; std::cout << "l=" << l << std::endl; std::cout << "u=" << u << std::endl; std::cout << std::endl; } int main(){ f(1,2.5,"tapir"); char * plop = "plop"; traite(&plop,2.3,4.2,4.8,"mando"); return 0; }
A noter que envoyer NULL sur std::cout bloque l'écriture sur ce flux c'était peut être ton problème. Ca doit se régler avec un std::flush ou truc dans le genre.
Bonne chance
Je trouve que 0 est plus parlant que NULL surtout qu'il me semble bien que NULL est défini ainsi :
#define NULL 0
Mais bref, non, le problème persiste.
Pour t'en convaincre, j'ai fait
void fct(double& a,const double& ab=0.33)
{...}
et l'erreur de compilation est toujours
traite.h:15: assignement of read-only reference 'ab'
J'ai tester sur une deuxième machine (gcc 3.4.2) Si ce n'est pas la version de gcc, ça viens peux être d'une option.
mon fichier s'appel *.cpp, donc compiler en C++. Peut être qu'en C la commande passerai?
#define NULL 0
Mais bref, non, le problème persiste.
Pour t'en convaincre, j'ai fait
void fct(double& a,const double& ab=0.33)
{...}
et l'erreur de compilation est toujours
traite.h:15: assignement of read-only reference 'ab'
J'ai tester sur une deuxième machine (gcc 3.4.2) Si ce n'est pas la version de gcc, ça viens peux être d'une option.
mon fichier s'appel *.cpp, donc compiler en C++. Peut être qu'en C la commande passerai?
Salut.
Oui, il fonctionne. Merci. J'ai trouvé l'erreur. Elle viens du fait que je modifie l dans la suite(pb d'interprétation du message du compilo et de num de lignes). Remarque, en mettant le const je m'en doutait. mais comme ça ne compile pas sans le const...
J'en déduit, que mon pb n'a pas de solution simple.
Oui, il fonctionne. Merci. J'ai trouvé l'erreur. Elle viens du fait que je modifie l dans la suite(pb d'interprétation du message du compilo et de num de lignes). Remarque, en mettant le const je m'en doutait. mais comme ça ne compile pas sans le const...
J'en déduit, que mon pb n'a pas de solution simple.