C++ - références

Bonsoir,

Je travaille actuellement sur les références en C++ qui permettent d'accéder aux variables ...
J'étudie en particulier les fonctions retournant une référence.
Mais ce code ne fonctionne pas :

double x, y;

double& maxi(double& a, double& b)
{
  return a > b ? a : b ;
}


void setup() {
  Serial.begin(115200);
  Serial.print(++maxi(5, 6));

}

void loop() {}

Je devrai avoir le chiffre 7 qui s'affiche dans le moniteur série

Mais j'ai des erreurs à la compilation :

D:\Utilisateur\Documents\Arduino\Cpp_reference\Cpp_reference.ino: In function 'void setup()':
Cpp_reference:11:25: error: cannot bind non-const lvalue reference of type 'double&' to an rvalue of type 'double'
  Serial.print(++maxi(5,6));
                         ^
D:\Utilisateur\Documents\Arduino\Cpp_reference\Cpp_reference.ino:3:9: note:   initializing argument 1 of 'double& maxi(double&, double&)'
 double& maxi(double& a, double& b)
         ^~~~
exit status 1
cannot bind non-const lvalue reference of type 'double&' to an rvalue of type 'double'
La carte sur COM15 n'est pas disponible

Bon je suis un peu fatigué à cause de mes sorties en forêt ...
Merci pour votre indulgence.
Bonne soirée.

PC : notre compilateur ne les gére peut-être pas ou j'ai pas bien compris !

double x, y;

double& maxi(double& a, double& b)
{
  return a > b ? a : b ;
}


void setup() {
  Serial.begin(115200);
  x = 5;
  y = 6;
  Serial.print(++maxi(x, y));

}

void loop() {}

Désolé c'est la fatigue :grinning:

Le renard en forêt : tu as coursé des lapins toute la journée ? :rofl:

D’où avez trouvé tout seul la réponse
Bravo :wink:

Bonjour @J-M-L, bonjour @lesept ,

En fait, la première version de mon programme effectue un passage par valeur ce qui constitue un non sens. Une fonction C++ peut retourner une référence, du coup elle est capable de retourner une variable (la preuve ++maxi) ! mais les paramètres de la fonction doivent necessairement être passés par référence et non pas par valeur.

Les paramètres formels de la fonction initialisent les références :
(double& a, double& b)
Les paramètres rééls quant à eux affectent des valeurs à des variables qui sont ensuite référencées par la fonction. :

x = 5;
y = 6;

les paramètres réels et les paramètres formels ne constituent plus qu’une seule entité. Les paramètres formels référencent les paramètres réels
c'est un processus indispensable ...

Voilà ce que je comprends mais est-ce vraiment correct ?

@lesept

Non je me lève vers 05h00 tous les matins pour aller en forêt et comme je me couche toujours tard
:wink:
C'est eux que je course :


ou eux :

:wink:

En fait je ne voulais pas écrire d'où mais Donc... mon iPhone m'a joué un tour :slight_smile:

c'est tout à fait ça. en passant un literal (directement une valeur) il n'y a pas de case mémoire associée, donc on ne peut pas prendre sa référence.

Merci @J-M-L
Bonne journée.

bonne journée !
(superbe photos au fait)

Il y en a des centaines mais les conditions sont difficiles cette année (sécheresse = bruits, pas d'herbe hors forêt et les biches ne sortent que rarement avec les cerfs..) donc c'est plus compliqué car le brame ne se passe qu'en forêt, les animaux sortent rarement et je n'ai pas le droit d’entrer dans les parcelles ...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.