[C++] valeur par défaut
Résolu/Fermé
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
-
14 nov. 2006 à 17:28
mamiemando Messages postés 33567 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 11 mars 2025 - 17 nov. 2006 à 14:50
mamiemando Messages postés 33567 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 11 mars 2025 - 17 nov. 2006 à 14:50
A voir également:
- [C++] valeur par défaut
- Windows 11 clic droit afficher plus d'options par défaut - Guide
- Google page d'accueil par défaut - Guide
- Mot de passe par defaut livebox - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Ouvrir avec par défaut - Guide
12 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
14 nov. 2006 à 17:35
14 nov. 2006 à 17:35
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 }
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
16 nov. 2006 à 10:36
16 nov. 2006 à 10:36
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
mamiemando
Messages postés
33567
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
15 nov. 2006 à 09:36
15 nov. 2006 à 09:36
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
15 nov. 2006 à 10:36
15 nov. 2006 à 10:36
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
mamiemando
Messages postés
33567
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
15 nov. 2006 à 23:57
15 nov. 2006 à 23:57
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
mamiemando
Messages postés
33567
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
16 nov. 2006 à 14:49
16 nov. 2006 à 14:49
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
16 nov. 2006 à 16:32
16 nov. 2006 à 16:32
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...
mamiemando
Messages postés
33567
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
16 nov. 2006 à 18:51
16 nov. 2006 à 18:51
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
17 nov. 2006 à 08:34
17 nov. 2006 à 08:34
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?
mamiemando
Messages postés
33567
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
17 nov. 2006 à 09:48
17 nov. 2006 à 09:48
Est-ce que le code que j'ai écrit dans <8> marche chez toi ?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
17 nov. 2006 à 10:22
17 nov. 2006 à 10:22
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.
mamiemando
Messages postés
33567
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
17 nov. 2006 à 14:50
17 nov. 2006 à 14:50
Oui c'est ce que j'avais dit au post <2>.