Ik probeer waarde naar de functie te sturen met behulp van de referentieaanwijzer, maar het gaf me een volledig niet voor de hand liggende fout voor mij
#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();
}
Fout: initiële waarde van verwijzing naar non-const moet een lvalue zijn
Ik heb geen idee wat ik moet doen om bovenstaande code te repareren, kan iemand me wat ideeën geven over hoe ik die code kan repareren? bedankt 🙂
Antwoord 1, autoriteit 100%
Als je een pointer doorgeeft aan een niet-const
referentie, vertel je de compiler dat je de waarde van die pointer gaat wijzigen. Uw code doet dat niet, maar de compiler denkt van wel, of is van plan dit in de toekomst te doen.
Om deze fout op te lossen, declareert u 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;
}
of maak een variabele waaraan u een pointer toewijst aan nKByte
voordat u test
aanroept:
float nKByte = 100.0;
// If "test()" decides to modify `x`, the modification will be reflected in nKBytePtr
float *nKBytePtr = &nKByte;
test(nKBytePtr);
Antwoord 2, autoriteit 18%
De &nKByte
creëert een tijdelijke waarde, die niet kan worden gebonden aan een verwijzing naar niet-const.
U kunt void test(float *&x)
wijzigen in void test(float * const &x)
of u kunt de aanwijzer gewoon helemaal laten vallen en void test(float &x); /*...*/ test(nKByte);
.
Antwoord 3, autoriteit 8%
Wanneer u test
aanroept met &nKByte
, creëert de operator address-of een tijdelijke waarde, en u kunt normaal gesproken geen verwijzingen naar tijdelijke waarden omdat ze, nou ja, tijdelijk zijn.
Gebruik geen referentie voor het argument, of beter nog, gebruik geen pointer.