C++ Valeur initiale de la référence à non-const doit être une valeur l
j'essaie d'envoyer la valeur dans la fonction en utilisant le pointeur de référence mais il m'a donné une erreur complètement de type étranger pour moi
#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 quelques idées sur la façon de réparer ce code? merci :)
3 réponses
Lorsque vous passez un pointeur par un non-const
référence, 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
constante
// This tells the compiler that you are not planning to modify the pointer
// passed by reference
void test(float * const &x){
*x = 1000;
}
ou faire 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);
&nKByte
crée une valeur temporaire, qui ne peut être liée à une référence à non-const.
Vous pouvez modifier void test(float *&x)
void test(float * const &x)
ou vous pouvez tout simplement laisser tomber le pointeur et utiliser void test(float &x); /*...*/ test(nKByte);
.
quand vous appelez test
&nKByte
, l'adresse de l'opérateur crée un valeur temporaire, et vous ne pouvez pas normalement avoir des références à des valeurs temporaires parce qu'ils sont, ainsi, temporaire.
soit n'utilisez pas de référence pour l'argument, ou mieux, n'utilisez pas de pointeur.