J'essaie d'envoyer de la valeur dans la fonction à l'aide du pointeur de référence, mais cela m'a donné une erreur de type complètement étranger
#include "stdafx.h"
#include <iostream>
using namespace std;
void test(float *&x){
*x = 1000;
}
int main(){
float nKByte = 100.0;
test(&nKByte);
cout << nKByte << " megabytes" << endl;
cin.get();
}
Erreur: la valeur initiale de référence à non-const doit être une valeur l
Je n'ai aucune idée de ce que je dois faire pour réparer le code ci-dessus, quelqu'un peut-il me donner des idées sur la façon de corriger ce code? Merci :)
Lorsque vous passez un pointeur par une référence nonconst
, vous dites au compilateur que vous allez modifier la valeur de ce pointeur. Votre code ne fait pas cela, mais le compilateur pense qu'il le fait ou prévoit de le faire à l'avenir.
Pour corriger cette erreur, déclarez x
constant
// This tells the compiler that you are not planning to modify the pointer
// passed by reference
void test(float * const &x){
*x = 1000;
}
ou créez une variable à laquelle vous affectez un pointeur à nKByte
avant d'appeler test
:
float nKByte = 100.0;
// If "test()" decides to modify `x`, the modification will be reflected in nKBytePtr
float *nKBytePtr = &nKByte;
test(nKBytePtr);
Le &nKByte
Crée une valeur temporaire, qui ne peut pas être liée à une référence à non-const.
Vous pouvez remplacer void test(float *&x)
par void test(float * const &x)
ou vous pouvez simplement supprimer le pointeur et utiliser void test(float &x); /*...*/ test(nKByte);
.
Lorsque vous appelez test
avec &nKByte
, l'opérateur d'adresse crée un valeur temporaire, et vous ne pouvez normalement pas avoir de références à des valeurs temporaires car elles sont, eh bien, temporaires.
N'utilisez pas de référence pour l'argument, ou mieux encore n'utilisez pas de pointeur.